PHP 子命名空间用法
PHP sub-namespaces usage
PHP 和命名空间。
我假设我误解了它的正确 usage/idea..
(请读到最后)
我有两个文件:1.php
、2.php
1.php:
namespace App\someNS;
class classname{}
2.php:
namespace App;
include_once("1.php");
use App\someNS; // tried to comment it also, not working
$ x = new classname();
// this fails..
我的假设是命名空间是 containers\scope,因此通过包含一个命名空间 - 我可以访问它的内容;
我预计 use App\someNS
会 "include" 它。
我知道 someNS\classname() 会起作用,但我看不出命名空间的巨大优势,如果它们唯一的 "profit" 是为变量使用相同名称的选项,如果毕竟我仍然需要使用路径来获取它们...我缺少什么?
命名空间就像文件系统中的目录和文件一样工作。
可以进入一个目录执行一个文件:
cd /var/www/project
phpunit SomeTest
或者你可以通过整个路径执行文件:
/var/www/project/phpunit SomeTest
在你的例子中,你可以使用:
//class2
namespace App;
include_once('1.php');
use App\someNS\classname;
$x = new classname();
或
//class2
namespace App;
include_once('1.php');
use App\someNS;
$x = new someNS\classname();
甚至
//class2
namespace App;
include_once('1.php');
$x = new someNS\classname();
您可以找到更多详细信息here
命名空间、use
和包含文件实际上是三个不同的东西:
命名空间只是一个前缀,允许在代码库的不同部分重用相同的 class 和函数名称。
use
语句只创建一个别名,因此您不需要键入全名(名称空间+本地名称),或者您可以使用不同名称的所有对象。它不导入或加载代码。
include
实际上是使其他文件中的代码可用,但在 PHP.
[=36 中实现名称空间之前它已经存在多年=]
也就是说,你的代码应该抛出:
Class 'App\classname' not found in ....php
那是因为您的 use
别名是命名空间的别名,所以您需要调用:
new someNS\classname();
为了能够做到 new classname()
,您需要为 class:
添加别名
use App\someNS\classname;
PHP 和命名空间。
我假设我误解了它的正确 usage/idea..
(请读到最后)
我有两个文件:1.php
、2.php
1.php:
namespace App\someNS;
class classname{}
2.php:
namespace App;
include_once("1.php");
use App\someNS; // tried to comment it also, not working
$ x = new classname();
// this fails..
我的假设是命名空间是 containers\scope,因此通过包含一个命名空间 - 我可以访问它的内容;
我预计 use App\someNS
会 "include" 它。
我知道 someNS\classname() 会起作用,但我看不出命名空间的巨大优势,如果它们唯一的 "profit" 是为变量使用相同名称的选项,如果毕竟我仍然需要使用路径来获取它们...我缺少什么?
命名空间就像文件系统中的目录和文件一样工作。
可以进入一个目录执行一个文件:
cd /var/www/project
phpunit SomeTest
或者你可以通过整个路径执行文件:
/var/www/project/phpunit SomeTest
在你的例子中,你可以使用:
//class2
namespace App;
include_once('1.php');
use App\someNS\classname;
$x = new classname();
或
//class2
namespace App;
include_once('1.php');
use App\someNS;
$x = new someNS\classname();
甚至
//class2
namespace App;
include_once('1.php');
$x = new someNS\classname();
您可以找到更多详细信息here
命名空间、use
和包含文件实际上是三个不同的东西:
命名空间只是一个前缀,允许在代码库的不同部分重用相同的 class 和函数名称。
use
语句只创建一个别名,因此您不需要键入全名(名称空间+本地名称),或者您可以使用不同名称的所有对象。它不导入或加载代码。
[=36 中实现名称空间之前它已经存在多年=]include
实际上是使其他文件中的代码可用,但在 PHP.
也就是说,你的代码应该抛出:
Class 'App\classname' not found in ....php
那是因为您的 use
别名是命名空间的别名,所以您需要调用:
new someNS\classname();
为了能够做到 new classname()
,您需要为 class:
use App\someNS\classname;