| Filesystem | PHP Namespace
--------------------------|-----------------------|-------------------------
Cas sensitive | No | Yes
--------------------------|-----------------------|-------------------------
Name with plain number | Yes | No
--------------------------|-----------------------|-------------------------
Path level | Yes | Yes
--------------------------|-----------------------|-------------------------
Plain metacharacters name | Yes | No
有一个名为:Controller.php的控制器类,它位于路径中:
< < em > app / Http /控制器/ em >从项目的根目录
还有另一个名为:Controller.php的控制器类,但这个类在路径中:
来自项目根目录的供应商/ laravel /框架/ src /照明/路由
如果你是php新手,你还不需要看源代码,因为它会让你困惑,相反,让我向你解释的部分
它是我们所关心的,并将帮助我们理解“名称空间”和“使用”。< / em > < / p >
所以事实上,我们的第一个控制器类
< em >应用程序/ Http /控制器/ Controller.php < / em >需要使用
第二个控制器类< em >供应商/ laravel /框架/ src /照明/路由/ Controller.php < / em >。
它实际上需要扩展这个类,以便能够访问它的内容来处理一些关键的路由功能
那么一个类如何扩展另一个具有相同名称的类呢?
class Controller extends Controller吗?这是行不通的,
除非有办法实现区分这两个类,这时namespace和use关键字就派上用场了
有助于完成的任务,允许使用;(类;方法;接口和常量),具有相同的名称,在相同的作用域
现在是如何在代码中完成的?很简单的!< / em >如果我们查看< em >应用程序/ Http /控制器/ Controller.php < / em >源代码,我们可以在类的顶部看到
namespace被声明为:namespace App\Http\Controllers,所以这就是你如何给你的类一个命名空间,这样它就可以被其他类引用
现在它看起来和从项目根目录到这个类的路径是一样的,差别很小,这就是使用" \ "而不是" / "
(与windows命令提示符相同),
但还有一个区别,那就是名称空间中带有大写“A”的App和带有“App”的App
路径中小写的“a”。还要注意命名空间区分大小写 < / p >
所以命名空间是一个与路径不同的概念,它可以遵循路径结构,如果它有帮助,但它不必是到
类,方法,接口或常量为例,看看:
供应商/ laravel /框架/ src /照明/路由/ Controller.php源代码,
在类的顶部,我们看到命名空间被声明为:Illuminate\Routing
现在让我们来看看" use "关键字,
我们使用" use "关键字使我们的类意识到我们想在类中使用的特定类或函数
所以我们没有引进或包括任何东西我们只是让我们的类知道我们将使用特定的类或
方法,通过它们的名称空间引用它们
让我们来看看< em >应用程序/ Http /控制器/ Controller.php < / em >的源代码,
正如你可以从这一行中看到的:" use Illuminate\Routing\Controller as BaseController ", " use "关键字后跟名称空间
对于目标类
(注意,Illuminate\Routing\Controller.php和Illuminate\Routing\Controller '不带。php扩展名'是可以互换的
我们可以使用" as "关键字和" use "关键字来给特定的类、方法、接口或常量一个别名
< em >应用程序/ Http /控制器/ Controller.php < / em >将< em >照亮\路由\ Controller.php < / em >扩展为该行中的BaseController:
“class Controller extends BaseController”。< / p >
<?php
// FilePath:- namespaces/index.php
// let's say, we have two classes in index,
// here, these two classes have global space
class A
{
function __construct()
{
echo "I am at Global space, Class A";
}
}
class B
{
function __construct()
{
echo "I am at Global space, Class B";
}
}
// now create an object of class and
$object = new A; // unqualified class name
echo "<br/>";
$object = new \B; // fully qualified class name
// output:
I am at Global space, Class A
I am at Global space, Class B