php命名空间的使用?php变量的命名规则
大家好,今天小编来为大家解答php命名空间的使用这个问题,php变量的命名规则很多人还不知道,现在让我们一起来看看吧!
PHP 为什么要使用命名空间,命名空间的作用
命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误。这种情况下只要避免命名重复就可以解决,最常见的一种做法是约定一个前缀。
举个栗子:项目中有两个模块:article和message board,它们各自有一个处理用户留言的类Comment。之后我可能想要增加对所有用户留言的一些信息统计功能,比如说我想得到所有留言的数量。这时候调用它们Comment提供的方法是很好的做法,但是同时引入各自的Comment类显然是不行的,代码会出错,在另一个地方重写任何一个Comment也会降低维护性。那这时只能重构类名,我约定了一个命名规则,在类名前面加上模块名,像这样:Article_Comment、MessageBoard_Comment
可以看到,名字变得很长,那意味着以后使用Comment的时候会写上更多的代码(至少字符多了)。并且,以后如果要对各个模块增加更多的一些整合功能,或者是互相调用,发生重名的时候就需要重构名字。当然在项目开始的时候就注意到这个问题,并规定命名规则就能很好的避免这个问题。另一个解决方法可以考虑使用命名空间。
基础
命名空间将代码划分出不同的空间(区域),每个空间的常量、函数、类(为了偷懒,我下边都将它们称为元素)的名字互不影响,这个有点类似我们常常提到的‘封装'的概念。
创建一个命名空间需要使用namespace关键字,这样:
复制代码代码如下:
<?php
//创建一个名为'Article'的命名空间
namespace Article;
?>
要注意的是,当前脚本文件的第一个命名空间前面不能有任何代码,下面的写法都是错误的:
复制代码代码如下:
//例一
//在脚本前面写了一些逻辑代码
<?php
$path="/";
class Comment{}
namespace Article;
?>
//例二
//在脚本前面输出了一些字符
<html></html>
<?php
namespace Article;
?>
为什么要说第一个命名空间呢?因为同一脚本文件中可以创建多个命名空间。
下面我创建了两个命名空间,顺便为这两个空间各自添加了一个Comment类元素:
复制代码代码如下:
<?php
//创建一个名为'Article'的命名空间
namespace Article;
//此Comment属于Article空间的元素
class Comment{}
//创建一个名为'MessageBoard'的命名空间
namespace MessageBoard;
//此Comment属于MessageBoard空间的元素
class Comment{}
?>
在不同空间之间不可以直接调用其它元素,需要使用命名空间的语法:
复制代码代码如下:
<?php
namespace Article;
class Comment{}
namespace MessageBoard;
class Comment{}
//调用当前空间(MessageBoard)的Comment类
$comment= new Comment();
//调用Article空间的Comment类
$article_comment= new\Article\Comment();
?>
可以看到,在MessageBoard空间中调用article空间里的Comment类时,使用了一种像文件路径的语法:\空间名\元素名
除了类之外,对函数和常量的用法是一样的,下面我为两个空间创建了新的元素,并在MessageBoard空间中输出了它们的值。
复制代码代码如下:
<?php
namespace Article;
const PATH='/article';
function getCommentTotal(){
return 100;
}
class Comment{}
namespace MessageBoard;
const PATH='/message_board';
function getCommentTotal(){
return 300;
}
class Comment{}
//调用当前空间的常量、函数和类
echo PATH;///message_board
echo getCommentTotal();//300
$comment= new Comment();
//调用Article空间的常量、函数和类
echo\Article\PATH;///article
echo\Article\getCommentTotal();//100
$article_comment= new\Article\Comment();
?>
然后我的确得到了Article空间的元素数据。
子空间
命名空间的调用语法像文件路径一样是有道理的,它允许我们自定义子空间来描述各个空间之间的关系。
PHP 函数命名中的命名空间前缀
PHP函数命名中的命名空间前缀是附加在函数名称之前的标识符,用于识别函数的命名空间。以下是对命名空间前缀的详细解析:
定义与作用:
命名空间前缀是一个可选的标识符,通过使用符号附加到函数名称之前,用于在函数调用中明确指定函数所属的命名空间。
例如,位于AppUtils命名空间中的arraySum函数,其完整调用方式为AppUtilsarraySum($array)。
约定与规范:
命名空间前缀通常使用小写字母,并应反映函数所在命名空间的顶级目录结构,以保持代码的一致性和可读性。
在实战案例中,若函数sumArray位于MyProjectUtils命名空间中,则调用时应使用MyProjectUtilssumArray($array)。
使用方式:
除了直接使用完整命名空间前缀调用函数外,还可以通过use关键字引入命名空间,从而简化函数调用。
例如,使用use MyProjectUtils;后,可以直接通过UtilssumArray($array)调用函数。
好处:
增强可读性:命名空间前缀使函数调用更具描述性,特别是在处理来自不同命名空间的函数时。
避免名称冲突:当多个命名空间中存在同名函数时,命名空间前缀有助于明确指定要调用的函数,避免潜在的冲突。
优化自动加载:某些自动加载器可以利用命名空间前缀来提高性能,因为它们可以仅加载与特定命名空间相关的文件。
注意事项:
命名空间前缀仅适用于传统函数语法,不适用于闭包或箭头函数。
在使用命名空间前缀时,应确保其与函数的实际命名空间一致,以避免调用错误。
phpstorm怎么格式化代码
phpstorm代码格式化方法:
快捷键:Ctrl+ Alt+ L
设置代码样式:File-> Settings-> Code Style->PHP
根据个人php代码规范和个人喜好设置 PHP等代码的样式结构。
phpstorm可以设置:
1、等号对齐
2、中括号显示方式...
3、空格显示方式等...
总之,只要你想要的都可以设置,自己慢慢折腾吧...
代码示范:
<?php
class HellowordController extends Controller
{
public function actionIndex($id)
{
echo'hello word!';
echo$id;
}
public function actions()
{
return array('edit'=>'application.controllers.helloword.UpdateAction',);
}
}
另外,对 phpstorm设置好后,可以把设置信息导出,以便后续安装后再次使用。
导出设置方法:File-> Export Settings
导入设置方法:File-> Import Settings
好了,文章到此结束,希望可以帮助到大家。