PHP呼吁空间namespace及use的用法小结
副问题[/!--empirenews.page--]
定名空间一个最明晰的目标就是办理重名题目,PHP中不应承两个函数可能类呈现沟通的名字,不然会发生一个致命的错误。这种环境下只要停止定名一再就可以办理,最常见的一种做法是约定一个前缀。 行使namespace的目标:团队相助项目时,停止与团队其余成员新建的类产生斗嘴;小我私人认真项目时,停止前后新建的类产生斗嘴; 据小我私人领略,用到所必要的类时,必要先require或include引入,以是会产生类重界说的错误的条件是:两个沟通定名的类都有被引入。今朝有些php框架会自动加载(即include)全部新建的model类,所觉得了停止你新建的model类和项目框架原生的焦点类产生重名斗嘴,回收了namespace。(想了想,与团队成员新建的类发生斗嘴应该通过雷同停止,纵然事发后也应该从头调解类名即时维护,停止后期造成由于对类的领略夹杂而带来维护上的伟大度进步) 团结行使要领来进一步领略它的行使目标吧。 namespace的行使要领:为了举办测试,我将建设3个文件:1.php和name.php(此文件用来执行测试),后头将不再声名,请自行留意代码的变革。 1.namespace后定名的界说不区分巨细写namespace one; namespace One; namespace ONE; 如上写法都可以,选择一种作为本身的类型即可。(后头代码我回收第一种举办测试哈) 2. 没有界说定名空间,就领略为行使顶级定名空间。new类时,可以在类前加上反斜杠,也可以不加。3. new类时,带上定名空间时,之间必然用反斜杠字符,而不是顺斜杠。影象要领:按找%中斜杠的次序领略为顺斜杠。(偶然说反斜杠,本身都不知道是哪种偏向,早年按自左向右上升偏向这种偏向影象,此刻感受这个太不靠谱了) 4.类在指定数名空间下, new类时,必然要带上指定的定名空间。没有带上指定的定名空间,凭证第2点,php就会从顶级定名空间里找这个类。牢记:这里不能凭证顶级定名空间包括统统其余的定名空间来领略。而应该将顶级定名空间完完全全与其他定名空间区分隔。 可以举个这个普通例子来领略:带上指定数名空间代表或人的苹果(在他手里),顶级定名空间代表苹果箱里的苹果(在箱子里)。此刻要找或人的苹果,就将或人的定名空间带上,不然就会从箱子里找或人的苹果,功效虽然是找不到。 5.定名空间声明后的代码便属于这个定名空间,纵然有include或require也不影响(重点是对后半句的领略,详细看代码)。最后一行功效报错: 起首,这里与第2点较量一下: 第2点,我说,没有定名空间时,new类时,有没有反斜杠意义一样。 在这里,有了定名空间,有和没有反斜杠的意义就纷歧样了。 最后一行换成 功效报错: 接着,就说说当前这点。 我们可以发明,最后一行代码对应的定名空间为test,并没有受到require文件里的定名空间的影响。 进一步增强验证,我修改了name.php文件如下: 最后,这个例子革新了我对require的熟悉了。 凭证我早年对require的领略:PHP 措施在执行前,就会先读入 require 所指定引入的文件,使它酿成 PHP 措施网页的一部门。以是我经常就简朴的领略为替代,只不外把抽离出来的代码再放回原处罢了。然后我试了将1.php文件内容放到name.php里: 无需new类,该文件就会报错: Fatal error: Cannot redeclare class onePerson 看来简朴的把require领略为替代,在这里行不通。 6.namespace里不包括类名称,纵然存在与类名称同名的部门,那也不代表类。new类时,照旧得将这部门带上。 不外这样纯粹是多此一举,直接爽性点,namespace里不要带类名称就好。 7.一个php文件中可以存在多个定名空间,第一个定名空间前不能有任何代码。 只说第一个定名空间前不能有任何代码,之后的定名空间之前可以有代码。这个自行测试即可。 php定名空间namespace告一段落了,接下来说说use的用途。 行使use的目标:在定名空间字符串过长时,行使use可以响应的收缩定名空间。 use的行使要领:(编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |