Переменная PHP из расширенного класса - PullRequest
0 голосов
/ 07 марта 2011

Я не могу получить переменную из родительского класса:

class core {
    var $variable;
    var $test;

    function __construct() {}

    public function setVar($var) 
        $this->variable = $var;
    }
}

class test extends core {
    public function getVar() {
        return $this->variable;
        //also if i echo here i can't see !!!!
    }
}

$core = new core();
$core->setVar("ok");
$core->test = new test();
print $core->test->getVar();

Любая помощь ??

Ответы [ 5 ]

1 голос
/ 24 декабря 2012

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

class Test {
    public $instance = 0;
    public static $static = 0;
    // ... getters, setters
}

// create two instances of class Test
$first = new Test();
$second = new Test();

$first->setInstance(1);
$first->setStatic(1);

$second->getInstance(); // 0
$second->getStatic(); // 1

Итак, в вашем случае $core->variable и $core->test->variable - это две разные переменные, и установка одной не влияет на другую. Если вы объявите $variable как статическое, тогда они будут той же переменной.

0 голосов
/ 07 марта 2011

Ответ прост, $variable не содержит значения,

, вам нужно установить значение так:

$core = new core();
$core->test = new test();
$core->setVar("Something");

print $core->test->getVar(); //Something
0 голосов
/ 07 марта 2011

Обычно имена классов в PHP начинаются с заглавной буквы: Core, Test, но это всего лишь соглашение.

Затем вы никогда не присваиваете значение переменной $, поэтому при вызове getVar(),метод ничего не возвращает.

И, как уже говорилось, var - это старый синтаксис, теперь вы должны дать видимости своей переменной с помощью public, protected или private, как в C ++ или Java.,В вашем случае вы хотите использовать public или protected.

Наконец, ваш код не имеет особого смысла.Обычно getter и setter определены на одном уровне (то есть в одном классе), и нет смысла создавать экземпляр объекта Test в переменной из Core.Это создает зависимость между Core и Test, что совершенно неверно с точки зрения ООП.

0 голосов
/ 07 марта 2011

Не отлаживайте с помощью echo или print!Используйте var_dump ()!

var_dump($core->test->getVar());

Ваша ошибка станет очевидной!Также рассмотрите возможность поставить эту строку в начале скрипта:

error_reporting( E_ALL );
0 голосов
/ 07 марта 2011

Попробуйте это:

<?php

class core{

    var $variable;
    var $test;

    function __construct() {}

    public function setVar($var) {
      $this->variable = $var;
    }

}


class test extends core {

    public function getVar() {

       return $this->variable;
       //also if i echo here i can't see !!!!
    }

}

$test = new test(); // will call core->__construct()
$test->setVar(5); // this isn't being called with your original code
print $test->getVar(); // now you can call this and get back "5"

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