ThinkPHP 关于namespace的事儿
如题,php通常是不允许函数重名的,例如a.php中有一个getName(),b.php中有一个getName(),在require_once a.php和b.php后就会报getName重复定义的错误。改错误可以通过rename函数名来解决,或者通过namespace来解决。看下面的代码:
1 <?php 2 3 function getName(){ 4 echo 'getName 111'; 5 } 6 7 function getName(){ 8 echo 'getName 222'; 9 } ?>
这个代码是会报错函数重复定义错误的。可以通过下面的方式修改
1 namespace t1; 2 function getName(){ 3 echo 'getName 111'; 4 } 5 6 namespace t2; 7 function getName(){ 8 echo 'getName 222'; 9 } echo getName(); echo t1\getName(); echo \t1\getName();
通过命名空间 t1和t2来隔离getName函数,在下面的echo getName()会执行t2的getName函数,因为这种输出会查找最近的namespace的对于函数。
echo t1\getName()会报错,因为程序会查找最近的namespace,也就是真正执行的是 echo \t2\t1\getName()这个,在t2下没有t1\getName所以报错。
echo \t1\getName()执行t1的getName方法。
上面还可以通过use namespace的方式来解决
将echo t1\getName()修改为
use t1;
echo getName()也能解决问题。
在来看下面一段代码
1 namespace t1;
2 class Person{
3 function getName(){
4 return "t1.person.name";
5 }
6 }
7
8 namespace t2;
9 class Person{
function getName(){
return "t2.person.name";
}
}
use t1\Person;
Person::getName();
在最后Person::getName()时会发生错误,提示Person已经定义不能重复定义。原因是use t1\Person;把t1的Person类引入到了当前最近的namespace t2中,但是t2中已经存在Person类了,因此发生冲突,产生错误。解决办法如下
use t1\Person as Per;
Per::getName();
该代码使用as关键字,将引入的t1名称空间下的Person类重名命成了Per因此避免了和t2下的Person发生冲突。
ThinkPHP 关于namespace的事儿的更多相关文章
- 第7章 数据库访问与ORM 慕课网微信小程序开发学习笔记
第7章 数据库访问与ORM https://coding.imooc.com/learn/list/97.html 目录: 7-1 数据库操作三种方式之原生SQL 19:09 7-2 从一个错误了解E ...
- thinkphp autoload 命名空间自定义 namespace
使用thinkPHP过程中,一些自定义的类库和第三方类库需要找一个合适的位置放置,放到系统默认的org文件夹感觉不太好,破坏了thinkPHP的原生目录. 就看了一下官方手册,可以在模块或者应用的配置 ...
- utf-8 bom头问题 thinkphp 报错 Namespace declaration statement has to be the very first statement in the script
先看百度百科上的解释---- BOM —— Byte Order Mark,中文名译作“字节顺序标记”.在这里找到一段关于 BOM 的说明: 在UCS 编码中有一个叫做 "Zero Widt ...
- [ThinkPHP]报错:Fatal error: Namespace declaration statement has to be the very first statement or after any declare call in the script in E:\wamp\www\jdlh\application\index\controller\Index.php on line
错误提示说命名空间声明语句必须是第一句,可我看就是第一句没毛病呀,这是为啥呢,后面发现<?php 前面有个空格,删掉就正常了 去掉空格之后页面能正常显示
- THINKPHP源码学习--------文件上传类
TP图片上传类的理解 在做自己项目上传图片的时候一直都有用到TP的上传图片类,所以要进入源码探索一下. 文件目录:./THinkPHP/Library/Think/Upload.class.php n ...
- THINKPHP源码学习--------验证码类
TP3.2验证码类的理解 今天在学习中用到了THINKPHP验证码,为了了解究竟,就开始阅读TP验证码的源码. 源码位置:./ThinkPHP/Library/Think/Verify.class.p ...
- ThinkPhp 3.2 自动验证
自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证. 数据验证有两种方式: 静态方式:在模型类里面通过$_validate属性定义验证规则 ...
- ThinkPhp 3.2 CRUD操作
创建数据对象 ThinkPHP可以帮助你快速地创建数据对象,最典型的应用就是自动根据表单数据创建数据对象,这个优势在一个数据表的字段非常之多的情况下尤其明显. 很简单的例子: // 实例化User模型 ...
- ThinkPhp 3.2 常见问题与注意事项
1 命名空间声明必须写在脚本的最前面 如果运行PHP脚本后出现如下错误: Namespace declaration statement has to be the very first statem ...
随机推荐
- angular使用echarts折线图
echarts是开源的画图工具,在angular框架中引入echarts不能直接使用.需要新建一个directive //echarts基本参数 app.factory('$echartsConfig ...
- 【转载】Android 自动化测试 Emmagee
Emmagee 是一个性能测试小工具 用来监控指定被测应用在使用过程中占用机器的CPU, 内存,流量资源的性能小工具 Emmagee 介绍 Emmagee是网易杭州研究院QA团队开发的一个简单易上手的 ...
- akka实现的actor
定义一个 Actor 类 要定义自己的Actor类,需要继承 Actor 并实现receive 方法. receive 方法需要定义一系列 case 语句(类型为 PartialFunction[An ...
- call指令的一个细节
执行下面这个程序之后,ax的值是多少? assume cs:code code segment start: call s inc ax s: pop ax mov ax, 4c00h int 21h ...
- Facebook 网络模拟工具 ATC部署及使用
废话引用: Facebook此前开源了增强网络流量控制工具 ATC,能利用WiFi网络模拟各种移动网络,测试智能手机和APP在不同国家地区和应用环境下的性能表现.ATC能够模拟2G.2.5G(Edge ...
- 在apache中设置访问目录后进入的默认页面为index.php
找到apache的配置文件httpd.conf后找到 DirectoryIndex index.html index.php 在其中添加index.php,
- xml报文的装配解析
xstream dom 将map自动转化为xml报文 http://blog.csdn.net/lisheng19870305/article/details/45847985 报文的通信
- 终极解决maya渲染层丢材质,变线框等问题
终极解决maya渲染层丢材质,变线框等问题 相信有很多同志在使用maya做灯光渲染的时候,经常能遇到渲染层的模型丢材质.变线框等问题,特别恶心.我也经常遇到,所以和大家分享一下我的解决或尽量避免的方法 ...
- 将.war文件解压到指定目录
jar命令无法将.jar解压到指定目录,因为-C参数只在创建或更新包的时候可用 要将.jar文件解压到指定目录可以用unzip命令 unzip命令在windows下自带就有,不用另外下载安装 下面是将 ...
- C# 多线程详解 Part.04(Lock、Monitor、生产与消费)
系列1 曾经说过:每个线程都有自己的资源,但代码区是共享的,即每个线程都可以执行相同的函数. 这可能带来的问题就是多个线程同时执行一个函数,并修改同一变量值,这将导致数据的 ...