使用PHP在类中声明变量

时间:2012-10-09 14:43:46

标签: php class simplexml private class-variables

PHP的课程相当新,所以请耐心等待。

class processRoutes
    {   
        //Next line works
        private $doc = "works as as string";
        //Next line does not work, "Parse error: syntax error, unexpected T_NEW"
        private $doc = new SimpleXMLElement('routingConfig.xml', null, true);
        private function getTablenames()
        {
            //do stuff  
        }
    }

我正在尝试最终在我的类中使用SimpleXMLElement对象,在几个私有函数中。解决此问题的正确方法是什么,为什么我当前的方法不起作用?

3 个答案:

答案 0 :(得分:3)

您需要在构造函数中执行此操作,因为在此脚本解析阶段无法对此进行求值。 “简单”值,如字符串,bools和数值将起作用。

class processRoutes
{   
  //Next line works
  private $doc = "works as as string";

  private $doc;

  public function __construct()
  {
     $this->doc = new SimpleXMLElement('routingConfig.xml', null, true);
  }

  // ....
}

答案 1 :(得分:2)

您尝试使用对象实例初始化属性,但只允许使用可在“编译时”确定的常量初始化变量。

来自PHP Manual - Properties

  

此声明可能包括初始化,但此初始化必须是常量值 - 也就是说,它必须能够在编译时进行评估,并且必须不依赖于运行时信息才能进行评估。

任何依赖于“运行时间”知识的初始化都需要执行

  • $this->doc上运行的构造函数(请参阅@ Dan-Lee关于如何实现此问题的答案),
  • 来自例如从构造函数调用的“初始化”函数(您可以这样做以保持“初始化”步骤与可能从您的构造函数完成的其他“实际工作”不同)或
  • 由您班级的消费者手动完成。消费者可以操作
    • 直接在属性或对象上(例如myProcessRoutes->doc = 'some other string'),
    • 通过函数调用您的对象,例如myProcessRoutes.initialise_doc('some other string')
    • 通过你对象的setter - 我会让你研究那些,因为我没有在PHP中使用它们! ; - )

(尽管如果这些方法发生在实例化/构造函数之后的时间是初始化,那么它是有争议的/哲学的。)

类构造函数/析构函数的要点是提供一个“钩子”,通过它可以根据需要初始化/处理对象实例。

您可能只需要根据示例创建一些特定的新实例,在这种情况下,您不需要接受来自使用者的构造函数的任何输入。

或者,您可能需要接受一些值才能正确设置您的课程。当您调用

时,这正是上面示例代码中发生的情况
private $doc = new SimpleXMLElement('routingConfig.xml', null, true);

(也就是说,您将'routingConfig.xml'nulltrue的值传递给SimpleXMLElement的新实例,以便此实例的构造函数可以初始化使用您传递给它的值的实例,可以使用)。

答案 2 :(得分:0)

只要您想引用类的变量,请使用关键字$ this

public function getTablenames()
{
    $my_new_variable = $this->doc; // Transfers the $doc variable
}