Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP在类中声明变量_Php_Class_Simplexml_Private_Class Variables - Fatal编程技术网

使用PHP在类中声明变量

使用PHP在类中声明变量,php,class,simplexml,private,class-variables,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(

对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对象。进行此操作的正确方法是什么?为什么我当前的方法不起作用?

您需要在构造函数中执行此操作,因为在脚本解析的这个阶段无法对其进行评估。”简单值,如字符串、布尔值和数值也可以

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

  private $doc;

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

  // ....
}

您需要在构造函数中执行此操作,因为在脚本分析的这个阶段无法对其进行计算。”简单值,如字符串、布尔值和数值也可以

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

  private $doc;

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

  // ....
}

任何时候你想要引用一个类的变量,使用关键字$this

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

任何时候你想要引用一个类的变量,使用关键字$this

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

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

该声明可能包含一个初始化,但该初始化必须是一个常量值——也就是说,它必须能够在编译时进行计算,并且必须不依赖于运行时信息才能进行计算

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

  • 在一个在
    $this->doc
    上运行的构造函数中(参考@Dan Lee关于如何实现它的答案)
  • 从内部,例如从构造函数调用的“initialiser”函数(您可以这样做,以使“初始化”步骤与从构造函数执行的其他“实际工作”不同),或者
  • 由类的使用者手动执行。用户可以操作
    • 直接在属性或对象上(例如
      myProcessRoutes->doc='someotherstring'
    • 通过对对象的函数调用,例如
      myProcessRoutes.initialise_doc('some other string')
      ,或
    • 通过对象上的setter-我将让您研究这些,因为我在PHP中没有使用它们
(尽管如果这些发生在实例化/构造函数之后的方法是真正的初始化,这是有争议的/哲学的)

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

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

或者,为了正确设置类,您可能需要接受一些值。这正是上面示例代码中调用时发生的情况

private $doc = new SimpleXMLElement('routingConfig.xml', null, true);

(也就是说,您正在将
'routingConfig.xml'
null
true
的值传递给
SimpleXMLElement
的新实例,以便该实例的构造函数可以使用传递给它的值初始化该实例,以备使用).

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

该声明可能包含一个初始化,但该初始化必须是一个常量值——也就是说,它必须能够在编译时进行计算,并且必须不依赖于运行时信息才能进行计算

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

  • 在一个在
    $this->doc
    上运行的构造函数中(参考@Dan Lee关于如何实现它的答案)
  • 从内部,例如从构造函数调用的“initialiser”函数(您可以这样做,以使“初始化”步骤与从构造函数执行的其他“实际工作”不同),或者
  • 由类的使用者手动执行。用户可以操作
    • 直接在属性或对象上(例如
      myProcessRoutes->doc='someotherstring'
    • 通过对对象的函数调用,例如
      myProcessRoutes.initialise_doc('some other string')
      ,或
    • 通过对象上的setter-我将让您研究这些,因为我在PHP中没有使用它们
(尽管如果这些发生在实例化/构造函数之后的方法是真正的初始化,这是有争议的/哲学的)

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

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

或者,为了正确设置类,您可能需要接受一些值。这正是上面示例代码中调用时发生的情况

private $doc = new SimpleXMLElement('routingConfig.xml', null, true);
(也就是说,您正在将
'routingConfig.xml'
null
true
的值传递给
SimpleXMLElement
的新实例,以便该实例的构造函数可以使用您传递给它的值初始化该实例,以备使用)。

\uu构造()
function是否只是一个填充函数,用于执行类似的各种任务?看起来不必要的额外步骤,但我相信这是有原因的…这是类实例化的时候。在这一步中没有不必要的步骤,这在您的情况下是强制性的。
\u construction()
函数只是一个填充函数,用于执行像这样的各种任务吗?看起来不必要的额外步骤,但我相信这是有原因的…这是类实例化的时候。在这一步中没有不必要的步骤,这在您的案例中是强制性的。