php中的名称空间

php中的名称空间,php,namespaces,static-members,Php,Namespaces,Static Members,我对在php中使用名称空间有点困惑,我想解释一下我在我的一个项目中遇到的问题 我在命名空间下有一个类 namespace BigBlueButton; class BigBlueButton { public function createMeeting($createMeetingParams, $xml = '') { //some code return new CreateMeetingResponse($xml); } } 我把它

我对在php中使用名称空间有点困惑,我想解释一下我在我的一个项目中遇到的问题

我在命名空间下有一个类

namespace BigBlueButton;
class BigBlueButton
{
   public function createMeeting($createMeetingParams, $xml = '')
    {
       //some code

        return new CreateMeetingResponse($xml);
    }
}
我把它当作

use \BigBlueButton;
    $bbb = new BigBlueButton\BigBlueButton();

//then I try to reference the variable $bbb in a function but I can't 

    function easymeet_create_meeting($id) {


 // $bbb = new BigBlueButton\BigBlueButton(); I don't want to create a new object here but reference the object I created above,something like this
      $bbb=BigBlueButton\bbb;
}

但我似乎无法访问上述变量,即$bbb,我尝试了
global$bbb
,但
$bbb
似乎不在全局命名空间中,我知道我试图访问上述代码中的常量$bbb,但我还是展示了它,告诉大家我想做什么

如果我理解正确,问题不在于名称空间

use \BigBlueButton\BigBlueButton;

function easymeet_create_meeting($id, BigBlueButton $bbb) {
    /* ... */
}

$bbb = new BigBlueButton();
$result = easymeet_create_meeting(1234, $bbb);
正如您所说,您可以尝试使用全局变量,例如:

use \BigBlueButton;
global $bbb;
$bbb = new BigBlueButton\BigBlueButton();

function easymeet_create_meeting($id) {
    global $bbb;
    // you can use it
}
也可以将变量发送到函数

function easymeet_create_meeting($id, $bbb) {

}

我不知道整个问题,但您也可以在类中使用单例设计模式,这样每次使用时都会得到相同的实例。

名称空间不会扩展到这样的变量:

在PHP世界中,名称空间设计用于解决两个问题: 库和应用程序的作者在创建 可重用的代码元素,如类或函数:

  • 创建的代码与内部PHP类/函数/常量或第三方文件之间的名称冲突 类/函数/常量
  • 能够别名(或缩短)超长名称,旨在缓解第一个问题,提高源代码的可读性
  • 您的类声明很好,但是您错误地使用了
    use
    关键字,因为它应该引用特定的类,而不是命名空间

    use \BigBlueButton\BigBlueButton;
    
    function easymeet_create_meeting($id, BigBlueButton $bbb) {
        /* ... */
    }
    
    $bbb = new BigBlueButton();
    $result = easymeet_create_meeting(1234, $bbb);
    
    您会注意到,我还将
    $bbb
    移动到函数参数中,因为。这也是因为为什么不呢

    更好的是:

    class BigBlueButton implements ButtonInterface {}
    class BigRedButton implements ButtonInterface {}
    
    以及:


    现在我们来看看基本的,这是一个好习惯。

    BigBlueButton\bbb不是一个变量。它是一个命名空间引用。。。