php空间推荐 可以上传视频的php空间

以下都是我自己的理解。如有错误,请见谅。

文章大纲:

使用名称空间的目的

如何使用名称空间

使用的目的使用

如何使用使用

使用namespace的目的:

处理团队项目时,避免与其他团队成员创建的新类发生冲突;个人负责项目时,避免新创建的班级前后冲突;

按照我个人的理解,在使用require类的时候,需要先引入require或者include,所以类重定义错误的前提是已经引入了两个同名的类。目前有些php框架会自动加载(即包含)所有新创建的模型类,所以为了避免你新创建的模型类和项目框架的原生核心类重名冲突,采用了namespace。(想了想,和团队成员创建的新类冲突应该通过沟通来避免。即使在事件发生后,也要重新调整类名进行即时维护,避免后期对类的理解混乱而导致维护的复杂性。)

结合使用方法进一步理解其用途。

namespace的使用方法:

为了测试,我将创建三个文件:1.php和name.php(这个文件用于测试),稍后将不再解释。请自行注意代码变化。

1.namespace后命名的定义不区分大小写

命名空间一;命名空间一;命名空间一;可以如上写,随便选一个作为自己的规格。(我用第一个代码来测试后面的代码。)

2. 没有定义命名空间,就理解为使用顶级命名空间。new类时,可以在类前加上反斜杠\\,也可以不加。

//1.php类Person { function _ _ construct(){ echo & # 39;我就是一个!';} }//name . PHP require _ once & # 39;。/1 . PHP & # 39;;新人();//输出我是一个!;new \\ Person();//输出我是一个!;

3. new类时,带上命名空间时,之间一定用反斜杠字符,而不是顺斜杠。

记忆法:按%中找到斜杠的顺序理解为正斜杠。(有时候说反斜杠,我都不知道是哪个方向。以前是按照从左到右上升的方向记的,现在觉得这个太不靠谱了。)

//name . phprequire _ once & # 39;。/1 . PHP & # 39;;new/Person();//代码错误:解析错误:语法错误,意外& # 39;/'

4.类在指定命名空间下, new类时,一定要带上指定的命名空间。

如果没有指定的命名空,根据第2点,php会从顶级命名空中找到这个类。记住:这不能理解为顶级命名空包含了所有其他命名空。而应该将顶级命名空与其他命名空完全区分开来。

//1.php命名空间一;class Person { function _ _ construct(){ echo & # 39;我就是一个!';}}

//name . phprequire _ once & # 39;。/1 . PHP & # 39;;新\\一\\人();//输出我是一个!;new \\ Person();//代码错误:致命错误:Class & # 39人& # 39;没找到可以拿这个通俗的例子来理解:拿指定的名字空代表某人的苹果(在他手里),顶名空代表苹果盒里的苹果(在盒子里)。如果你现在想找某人的苹果,带上某人的名字空,否则你会从盒子里找到某人的苹果,当然找不到。

5.命名空间声明后的代码便属于这个命名空间,即使有include或require也不影响(重点是对后半句的理解,具体看代码)。

//1.php命名空间一;class Person { function _ _ construct(){ echo & # 39;我就是一个!';}}

//name.phpnamespace测试;要求& # 39;。/1 . PHP & # 39;;新\\一\\人();//输出我是一个!;新人();//这里会有什么结果?猜猜看。

最后一行结果中的错误:

致命错误:类& # 39;测试\\人& # 39;未发现首先,这里有一个与第2点的对比:

第二点,我说了,当空和new class之间没有名字的时候,有没有反斜杠是一样的。

这里用空这个名字,有和没有反斜杠的意思是不一样的。

将最后一行替换为

new \\ Person();错误报告的结果:

致命错误:类& # 39;人& # 39;未发现

然后,再来说说目前的点位。

我们可以发现最后一行代码对应的名称空是test,它不受require文件中名称空的影响。

为了进一步加强核查,我对name.php文件作了如下修改:

//name.phpnamespace测试;要求& # 39;。/1 . PHP & # 39;;class Person { function _ _ construct(){ echo & # 39;我是测试!';} }新\\一\\人();//输出我是一个!;新人();//这里会有什么结果?自己猜。

最后,这个例子刷新了我对require的理解。

根据我之前对REQUE的理解:PHP程序在执行之前,会先读取REQUE指定的文件,并使其成为PHP程序网页的一部分。所以我往往简单的理解为替换,只是把提取出来的代码放回原来的地方。然后,我尝试将1.php文档的内容放入name.php:

//name.phpnamespace测试;命名空间一;class Person { function _ _ construct(){ echo & # 39;我就是一个!';} } class Person { function _ _ construct(){ echo & # 39;我是测试!';}}如果没有新类,文件将报告一个错误:

fatal error:CannotRedeclare Class One \\ person似乎简单地将require理解为replacement,这在这里不起作用。

6.namespace里不包含类名称,即使存在与类名称同名的部分,那也不代表类。new类时,还是得将这部分带上。

//name . phpnamespace test \\ person;class Person { function _ _ construct(){ echo & # 39;我是测试!';} }新\\考\\人\\人();//Naming 空 person不能代表类名,只是多此一举。简单明了,不要在名称空间中引入类名。

7.一个php文件中可以存在多个命名空间,第一个命名空间前不能有任何代码。

就说第一个命名空之前不能有代码,后面的命名空之前可以有代码。这个可以自己测试。

//name.phpnamespace测试;回声& # 39;翟14 & # 39;;命名空间翟;要求& # 39;。/1 . PHP & # 39;;

php命名空之间的命名空间走到了尽头。先说使用目的。

使用use的目的:

当名称空之间的字符串太长时,请使用use相应地缩短名称空。

use的使用方法:1.new类时,最前面无需用反斜杠。此外,use后没有as时,缩短的命名空间默认为最后一个反斜杠后的内容。

//name.phpnamespace动物\\狗;class Life { function _ _ construct(){ echo & # 39;狗命!';} }命名空间动物\\猫;class Life { function _ _ construct(){ echo & # 39;猫命!';} }新生活();//根据代码执行顺序,animal\\cat默认名称为new \\ animal \\ dog \\ Life()between空;//Ause动物\\狗;//anew狗\\ Life();//Buse animal\\dog为d;//b new d \\ Life();

通过比较线A和线B,我们需要注意:

使用use后,新类前面没有反斜杠。

当不使用use时,名称空前面有一个反斜杠。

通过比较线A和线B,我们可以理解:

使用后没有as时,缩写命名空默认为最后一个反斜杠后的内容。如上:

用动物\\狗;胜任

用动物\\狗当狗;

2.namespace后面不建议加类名,但use后可以。

//name.phpnamespace动物\\狗;class Life { function _ _ construct(){ echo & # 39;狗命!';} }命名空间动物\\猫;class Life { function _ _ construct(){ echo & # 39;猫命!';} }用动物\\狗\\命当狗;新狗();如上图,使用后添加类名,相当于更改类名:从生命到狗。

如果您没有在它上面使用as dog,您将会报告一个错误:

Fatalerror:不能使用animal \\ dog \\ life作为Life,因为该名称已被使用,因为在cat下有一个同名的Life类。

可以理解为使用后,这个昵称对应的类只能被当前命名空占用,不允许存在于其他命名空下。

//name.phpnamespace动物\\狗;class Life { function _ _ construct(){ echo & # 39;狗命!';} } class Dog { function _ _ construct(){ echo & # 39;狗咬狗!';} }命名空间动物\\猫;//class Dog {//function _ _ construct(){//echo & # 39;猫里的狗!';//}//} class Life { function _ _ construct(){ echo & # 39;猫命!';} }用动物\\狗;新狗\\狗();如上所述

用动物\\狗;猫

通过上面的代码,我觉得使用use(命名空)的目的和效果很明显。

简单总结一下:

命名空间是划分域的功能,也就是说这些东西属于某个被命名的空。

Use只是起到一个昵称的作用,无论是写作还是口语都可以省很多事。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

发表回复

登录后才能评论