namespace
use
. 我查阅了一些资料试图理解它们(
https://code.tutsplus.com/tutorials/namespacing-in-php--net-27203
). 我想我知道名称空间是什么,但我不太明白名称空间是如何导入的(
我发现名称空间的工作方式如下。我有一个lib.php文件:
<?php
namespace namespaceproj\lib1;
class lib1 {
private $var;
function __construct(){
$this->var='Run from lib';
echo $this->var;
}
}
我有一个index.php文件
<?php
namespace main ;
include "lib.php";
class lib1 {
private $var;
function __construct(){
$this->var='run from main';
echo $this->var;
}
}
$obj=new \namespaceproj\lib1\lib1(); // this refers to the class with namespace namespaceproj\lib1;
$obj = new lib1();// this refers to the class with namespace main .
一切都很好,现在我试着用
使用
关键字。我在use关键字中使用namespace\classname,可以直接实例化类。我猜当我们使用“use”时,类的名称空间就变成了main。
<?php
namespace main ;
include "lib.php";
class lib1 {
private $var;
function __construct(){
$this->var='run from main';
echo $this->var;
}
}
//Accessing class using use
use namespaceproj\lib1\lib1 as lib1inc ;
$obj=new lib1(); //This refers to class with main namespace
$obj=new lib1inc(); // This refers to class with namespaceproj\lib1; namespace
*/
现在是我无法理解的部分。如果不想单独导入类,而是要导入命名空间中的许多类,会发生什么情况?资源提示您可以使用use关键字导入名称空间。所以我尝试导入lib文件的名称空间并尝试实例化对象。如果我试着这样做
use namespaceproj\lib1 ;
$obj=new libnew();
它给我一个错误说:
无法将namespaceproj\lib1用作lib1,因为该名称已在第26行的C:\xampp\htdocs\AllTest\index.php中使用
我猜名称空间和该名称空间中的所有类都被导入到主名称空间,因此出现了错误。
as
关键字
use namespaceproj\lib1 as libnew;
$obj=new libnew();
这给了我一个错误:
致命错误:在第27行的C:\xampp\htdocs\AllTest\index.php中找不到类“namespaceproj\lib1”。
-
use关键字是否总是期望一个类,即使我告诉它导入一个名称空间?
-
如何导入命名空间(然后在该命名空间中实例化多个类)?
-
对于上面的示例,如何使用两个类,一个在main namespace中,另一个在namespaceproj\lib1 namespace中?