在 PHP 中从同名的命名空间导入全局类


importing a global class from a namespace of the same name in php

在这种情况下使用命名空间是完全清楚的,我创建了一个名为ArrayObject的新命名空间,并根据我的需要使用该类。

namespace NamespaceTesting;             
class ArrayObject{
    public $initVal;
    function __construct($a){
        $this->initVal = $a;
    }
    public function append($unusedVal){
        var_dump($this);
    }
} 
$a = new ArrayObject("test");
$a->append("unusedVal");

问题是,如果我想使用 ArrayObject 的全局类,我想我应该在之前使用 ArrayObject 来使用我的代码,但它不起作用。 怎么了?

namespace NamespaceTesting;             
class ArrayObject{
    public $initVal;
    function __construct($a){
        $this->initVal = $a;
    }
    public function append($unusedVal){
        var_dump($this);
    }
} 
// this is not working
use ArrayObject;
$a = new ArrayObject("test");
$a->append("unusedVal");

我解释错了什么?谢谢

namespace NamespaceTesting;        
class ArrayObject{
    public $initVal;
    function __construct($a){
        $this->initVal = $a;
    }
    public function append($unusedVal){
        var_dump($this);
    }
} 
// $a is an ArrayObject from global namespace, not from NamespaceTesting;
$a = new 'ArrayObject();
$a->append("unusedVal");
var_dump($a);

您正在创建命名空间NamespaceTesting而不是ArrayObject 因此需要这样称呼它(使用命名空间)

use NamespaceTesting;

如果你想使用内置的ArrayObject类......你需要在它前面加上斜杠

$a = new 'ArrayObject("test");