在PHP中将类名命名为MyClass和名称空间\ Myclass有什么区别?
我是PHP新手。我只是想了解PHP命名空间,并坚持要改变类名称,我指的是这篇文章标题为How to use PHP namespace。并在该页面上引用下面的代码。在PHP中将类名命名为MyClass和名称空间 Myclass有什么区别?
<?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
?>
在上面的代码,我想,他们已经创建的对象等,
$c = __NAMESPACE__ . '\\MyClass';
$m = new $c;
我想对象可以被创建在上述情况下那样简单,
$m = new MyClass();
而关于在其他代码中已使用代码创建对象,
$m = new namespace\MyClass;
现在,如果我比较以上所有三种,我找到两种创建类名称1的方法。$m = new MyClass();
和2. $m = namespace\MyClass;
。我想知道使用$m = namespace\MyClass;
有何区别和目的?非常感谢提前。
在PHP中使用名称空间的最大优点是当您有多个具有相同名称的类时。没有名称空间,开发人员需要担心通过创建类MyClass,还有数千个其他第三方库也可能具有MyClass。
假设您想创建一个名为DateTime的类。如果您只是在没有命名空间的情况下编写该函数,则会与PHP的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
?>
第二个优点是代码简洁。如果您使用上面显示的Foo \ DateTime命名空间,则在您从类中创建自定义对象时,不必使用完全限定名称。当您必须创建大量的自定义类的实例时,这非常有用。
当您使用像这样的命名空间,你可以把它写成一个别名,而不是一个完全合格的名称:
use Foo\DateTime as DateTime;
$myObject = new DateTime();
不使用命名空间,你需要创建对象,像这样,如果你想使用您的DateTime类,而不是PHP的DateTime类:
$myObject = Foo\DateTime();
我想有间没有任何本质上的区别:
$m = new MyClass();
和$m = new namespace\MyClass;
它可以帮助你明确地说明两个类具有相同名称的一个你使用的:
<?php
namespace Foo;
class MyClass {
public function WhoAmI() {
return __METHOD__;
}
}
?>
<?php
namespace Bar;
class MyClass {
public function WhoAmI() {
return __METHOD__;
}
}
?>
<?php
namespace Bar;
use Foo;
$obj1 = new MyClass;
var_dump($obj1->WhoAmI()); //Bar\MyClass::WhoAmI
$obj2 = new namespace\MyClass;
var_dump($obj2->WhoAmI()); //Bar\MyClass::WhoAmI
$obj3 = new Foo\MyClass;
var_dump($obj3->WhoAmI()); //Foo\MyClass::WhoAmI
我认为在这种情况下最好使用aliasing。
是的,这是真的,都被赋予了相同的输出。感谢您的链接,我指的是链接,并试图了解整个系统,将发布后评论。谢谢 – codenext