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对象,在几个私有函数中。解决此问题的正确方法是什么,为什么我当前的方法不起作用?
答案 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)
您尝试使用对象实例初始化属性,但只允许使用可在“编译时”确定的常量初始化变量。
此声明可能包括初始化,但此初始化必须是常量值 - 也就是说,它必须能够在编译时进行评估,并且必须不依赖于运行时信息才能进行评估。
任何依赖于“运行时间”知识的初始化都需要执行
$this->doc
上运行的构造函数(请参阅@ Dan-Lee关于如何实现此问题的答案),myProcessRoutes->doc = 'some other string'
),myProcessRoutes.initialise_doc('some other string')
或(尽管如果这些方法发生在实例化/构造函数之后的时间是初始化,那么它是有争议的/哲学的。)
类构造函数/析构函数的要点是提供一个“钩子”,通过它可以根据需要初始化/处理对象实例。
您可能只需要根据示例创建一些特定的新实例,在这种情况下,您不需要接受来自使用者的构造函数的任何输入。
或者,您可能需要接受一些值才能正确设置您的课程。当您调用
时,这正是上面示例代码中发生的情况private $doc = new SimpleXMLElement('routingConfig.xml', null, true);
(也就是说,您将'routingConfig.xml'
,null
和true
的值传递给SimpleXMLElement
的新实例,以便此实例的构造函数可以初始化使用您传递给它的值的实例,可以使用)。
答案 2 :(得分:0)
只要您想引用类的变量,请使用关键字$ this
public function getTablenames()
{
$my_new_variable = $this->doc; // Transfers the $doc variable
}