PHP создает объект из класса внутри другого класса - PullRequest
0 голосов
/ 09 марта 2012

Я пытаюсь создать объект класса для класса, но получаю неизвестную ошибку.

Это "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 ]

4 голосов
/ 09 марта 2012

Ваш второй фрагмент кода неверен.Вы не можете оценить код внутри класса 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 голос
/ 09 марта 2012

То, что вы пытаетесь сделать, неправильно, потому что (взято из документа)

Переменные-члены класса называются «свойствами».Вы также можете видеть, что они упоминаются с использованием других терминов, таких как «атрибуты» или «поля», но для целей данной ссылки мы будем использовать «свойства».Они определяются с использованием одного из ключевых слов public, protected или private, за которым следует обычное объявление переменной.Это объявление может включать в себя инициализацию, но эта инициализация должна быть постоянным значением, то есть она должна быть в состоянии быть оцененной во время компиляции и не должна зависеть от информации времени выполнения для оценки

так что вы должны сделать что-то вроде

class busniessLogic {
   private $obj;

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

 }
1 голос
/ 09 марта 2012

Ваш класс businessLogic определен неправильно.

<?php

include 'helperClass.php';

class busniessLogic {

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

$bLogic = new businessLogic();

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...