Проблема с назначением переменной класса в PHP - PullRequest
1 голос
/ 13 августа 2010

Я пытаюсь присвоить переменную классу в PHP, однако я не получаю никаких результатов?

Может кто-нибудь предложить какую-либо помощь?Код приведен ниже.Я пытаюсь отобразить URL, как показано ниже, сначала присвоив его переменной класса.

class PageClass {


    var $absolute_path = NULL;

    function get_absolute_path(){

    $url = $this->absolute_path;

    echo $url;

    }

}

$page = new PageClass();
$page->absolute_path = "http://localhost:8888/smile2/organic/";

$page->get_absolute_path(); //this should echo the URL as defined above - but does not

Ответы [ 3 ]

3 голосов
/ 13 августа 2010

Это также работает для меня.

Взгляните на живой пример вашего кода здесь.

Однако, естьНесколько вещей, которые вы должны изменить в своем классе.

Во-первых, Гарви делает хорошее замечание, что вы не должны использовать var.Это более старая версия PHP4, менее ориентированная на ООП.Скорее объявите каждую переменную public или private.Фактически, вы должны объявлять каждую функцию public или private тоже.

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

Если у вас есть getter, вы, вероятно, захотите setter, посколькуони обычно используются с private переменными, как я описал выше.

Последнее замечание: функции с именем get обычно return имеют значение.Если вы хотите display значение, обычно используется такое имя, как display_path или show_path:

<?php

   class PageClass 
   { 
        private $absolute_path = NULL;

        public function set_absolute_path($path)
        {
            $this->absolute_path = $path;   
        }

        public function display_absolute_path()
        {
            echo $this->absolute_path;
        }
    }

$page = new PageClass();
$page->set_absolute_path("http://localhost:8888/smile2/organic/");

$page->display_absolute_path();
  // The above outputs: http://localhost:8888/smile2/organic/

// Your variable is now safe from meddling.
// This:
// echo $this->absolute_path;
// Will not work. It will create an error like:
// Fatal error: Cannot access private property PageClass::$absolute_path on ...

?>

Пример в реальном времени здесь

В онлайн-справочнике по PHP есть раздел о классах и объектах .

3 голосов
/ 13 августа 2010
class PageClass {

    public $absolute_path = NULL;

    function get_absolute_path(){
       $url = $this->absolute_path;
       return $url;
    }

}

$page = new PageClass();
$page->absolute_path = "http://localhost:8888/smile2/organic/";

echo $page->get_absolute_path(); 
1 голос
/ 13 августа 2010

У меня отлично работает.
Вы проверили, что сценарий и ESP. этот код выполняется вообще?
Например. добавить некоторые безусловные выходные данные отладки в сценарий. Или установите отладчик, например XDebug , чтобы просмотреть код и проверить переменные.

<?php
class PageClass {
  var $absolute_path = NULL; // old php4 declaration, see http://docs.php.net/oop5

  function get_absolute_path() { // again old php4 declaration
    $url = $this->absolute_path;
    echo "debug: "; var_dump($url);
    echo $url;
  }
}

$page = new PageClass();
$page->absolute_path = "http://localhost:8888/smile2/organic/";

echo "debug: page->get_absolute_path\n";
$page->get_absolute_path();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...