我是PHP的新手。我只是想了解PHP命名空间并坚持改变类名,我引用这篇名为How to use PHP namespace的文章。并在该页面上引用了以下代码。
<?php
namespace App\Lib1;
class MyClass {
public function WhoAmI() {
return __METHOD__;
}
}
$c = __NAMESPACE__ . '\\MyClass';
$m = new $c;
echo $m->WhoAmI(); // outputs: App\Lib1\MyClass::WhoAmI
?>
在上面的代码中,我猜他们已经创建了Object like,
$c = __NAMESPACE__ . '\\MyClass';
$m = new $c;
我猜对象可以在上面的例子中简单地创建,
$m = new MyClass();
在同一页面上,在其他代码中,使用代码
创建了对象$m = new namespace\MyClass;
现在,如果我比较上述所有三个,我发现了两种创建类名1的方法$m = new MyClass();
和2. $m = namespace\MyClass;
。我想知道使用$m = namespace\MyClass;
有什么区别和目的?非常感谢提前。
答案 0 :(得分:1)
我认为:
之间没有任何本质区别 substring
和$m = new MyClass();
它可以帮助您明确指出您使用的具有相同名称的两个类中的哪一个:
$m = new namespace\MyClass;
我认为在这种情况下最好使用aliasing。
答案 1 :(得分:1)
在PHP中使用命名空间的最大优点是当您有多个具有相同名称的类时。如果没有命名空间,开发人员需要担心通过创建一个MyClass类,还有成千上万的其他第三方库也可以拥有MyClass。
假设你想创建一个名为DateTime的类。如果您刚刚编写了没有命名空间的函数,它将与PHP的DateTime类冲突。通过声明命名空间,您可以搜索代码。
Vector
第二个优点是代码简洁。如果使用上面显示的Foo \ DateTime命名空间,则在从类中创建自定义对象时,不必使用完全限定名称。当您必须创建大量自定义类的实例时,这非常有用。
当您像这样使用命名空间时,可以将其编写为别名而不是完全限定名称:
<?php
$myObject = DateTime(); // This statement creates an object using PHP's implementation of DateTime
namespace Foo\DateTime;
use Foo\DateTime as DateTime;
$myObject = DateTime(); // This statement will use the custom class from the Foo\DateTime namespace
$myObject = PHP\DateTime(); // This statement will use PHP's class even though you're using the Foo\DateTime namespace
?>
如果你不想使用命名空间,你需要像这样创建对象,如果你想使用你的DateTime类而不是PHP的DateTime类:
use Foo\DateTime as DateTime;
$myObject = new DateTime();