новый класс во включенных файлах - PullRequest
1 голос
/ 23 августа 2011

У меня есть несколько классов, и эти классы включены в файл index.php, например:

<?php
 include("./includes/user.class.php");
 include("./includes/anotherclass.class.php");
?>

, тогда у меня есть:

  $layout = new layout();
  $layout->sampleMethod;

тогда в теле у меня есть:

include("pages/samplePage.php");

тогда в этом samplePage.php

мне нужно снова создать new layout(), чтобы использовать функции класса, есть ли способ использовать $layout->method во включенном файле без создания другого объекта?

больше код:

Класс раскладки:

public function mkLayout()
  {
    include("pages/page.php");
  }
public function getPageUrl()
  {
    echo "PAGE URL";
  }

некоторые из index.php:

<?php
  require_once("includes/layout.class.php");

  $layout = new layout();
  $layout->mkLayout();
?>

некоторыеsamplePage.php

  <?php
    $layout->getPageUrl();
   ?>

samplePage.php возвращает:

Fatal error: Call to a member function getPageUrl() on a non-object in

Ответы [ 4 ]

1 голос
/ 23 августа 2011

Если вы используете $layout на включенной странице, она должна работать нормально, если, конечно, вы объявили $layout = new layout(); до того, как добавили samplePage.php.

Если он не работает для вас, попробуйте var_dump(), добавив его на включенной странице и посмотрите, что у вас там получится. Хотя это должно работать так, как вы просите.

Редактировать!

Немного покопавшись, я обнаружил, что куда бы ни включался файл, он наследует область действия функции / метода, который его использовал, поэтому используйте

global $layout;

Прежде чем пытаться использовать методы, и все должно работать нормально.

Ручной ввод :

Когда файл включен, код, который он содержит, наследует переменную область строки, в которой происходит включение. Любые переменные, доступные в этой строке в вызывающем файле, будут доступны в вызываемом файле, начиная с этого момента. Однако все функции и классы, определенные во включаемом файле, имеют глобальную область действия.

Полезные ссылки:

1 голос
/ 23 августа 2011

Нет, за исключением того, что вы хотите включить файл, который содержит предыдущее создание экземпляра класса макета.

0 голосов
/ 23 августа 2011

Возможно, вы не очень стремитесь к ориентации объекта в этом примере. Рассмотрите возможность использования простых функций без классов.

0 голосов
/ 23 августа 2011

Если оставить то, что вы опубликовали, если ваш код выглядит так:

<?php
    include("./includes/user.class.php");
    include("./includes/anotherclass.class.php");

    $layout = new layout();
    $layout->sampleMethod;

    include("pages/samplePage.php");
?>  

$layout уже должно быть объявлено в вашем pages/samplePage.php. Попробуйте сделать var_dump($layout) в pages/samplePage.php, и вы увидите, что оно уже определено.


Почему бы просто не иметь члена макета внутри вашего класса?

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