PHP从另一个类中的类创建一个对象

时间:2012-03-09 10:46:20

标签: php class object

我正在尝试为类创建一个类对象,但我不断收到一些未知错误。

这是“helper class”,它从XML文件中获取内容

<?php

class helperClass {

    private $name;
    private $weight;
    private $category;
    private $location;

    //Creates a new product object with all its attributes
    function __construct(){}

    //List products from thedatabase
    function listProduct(){

        $xmlDoc = new DOMDocument();
        $xmlDoc->load("storage.xml");
        print $xmlDoc->saveXML();
    }
  ?>
}

在这里,我尝试从helperClassclass创建一个对象,并从listProducts调用方法helperClass,但是如果我尝试实例化一个对象,它将无法运行helperClass

<?php
//Working code...
 class businessLogic {

    private $helper = null;

    public function __construct() {

    }

    public function printXML() {
        $obj = new helperClass();
        $obj->fetchFromXMLDocument();
        // you probably want to store that new object somewhere, maybe:
        $this->helper = $obj;
    }
}
}
?>

在你们的帮助下,我想出来了,这就是我想做的事情

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
        <?php
        require 'businessLogic.php';
        $obj = new businessLogic();
        $obj->printXML();
        ?>
    </body>
</html>

3 个答案:

答案 0 :(得分:4)

您的第二个代码段错误。您无法评估类def中的代码。只在一个类的方法里面。 尝试将代码放在构造函数中:

class busniessLogic {
  private $helper = null; // defining the property 'helper' with a literal

  // private $helper = new helperClass(); // this would throw an error because
  // it's not allowed in php.

  public function __construct() {
    $obj = new helperClass();
    $obj->listPruduct();

    // you probably want to store that new object somewhere, maybe:
    $this->helper = $obj;
  }
}

这只是在对象创建时如何执行代码的一个示例。

虽然我不会这样使用它。我宁愿将对象传入或稍后进行设置。

ref 依赖注入

创建对象后,您可以随心所欲地执行任何操作。例如调用方法(当然,必须在其上定义)或将其传递给其他对象。

答案 1 :(得分:1)

您的businessLogic类未正确定义。

<?php

include 'helperClass.php';

class busniessLogic {

  function __construct() {
    $obj = new helperClass();
    $obj->listPruduct();
  }
}

$bLogic = new businessLogic();

?>

答案 2 :(得分:1)

你试图做的是错的,因为(取自文档)

  

类成员变量称为“属性”。你也可以看到它们   引用使用其他术语,如“属性”或“字段”,但   出于本参考的目的,我们将使用“属性”。他们是   使用关键字public,protected或private之一定义,   然后是正常的变量声明。这个声明可能会   包括初始化,但这个初始化必须是一个常量   value - 也就是说,它必须能够在编译时进行评估   不得依赖于运行时信息才能进行评估

所以你应该做点什么

class busniessLogic {
   private $obj;

  function __construct(){
    $this->obj = new helperClass();
    $this->obj->listPruduct();
  }

 }