在PHP中将类名称命名为MyClass和namespace \ Myclass有什么区别?

时间:2016-12-06 05:00:56

标签: php namespaces

我是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;有什么区别和目的?非常感谢提前。

2 个答案:

答案 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();