我无法从父类中检索var:
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();
任何帮助??
答案 0 :(得分:1)
您似乎不了解静态变量和实例变量之间的区别。静态变量只存在一次,可以通过类的任何实例访问,而对于实例变量,每个对象都有不同的变量版本,而将变量设置在另一个对象上不会影响它。
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
声明为静态,则它们将是相同的变量。
答案 1 :(得分:0)
试试这个:
<?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"
?>
答案 2 :(得分:0)
通常,PHP中的类名以大写字母开头:Core,Test,但这只是约定。
然后,你永远不会给$ variable赋值,所以当你调用getVar()
时,该方法什么也不返回。
就像已经说过的那样,var
是一种旧语法,您现在应该使用{C}或Java中的public
,protected
或private
来提供对变量的可见性。在您的情况下,您希望使用public
或protected
。
最后,您的代码没有多大意义。通常getter和setter定义在同一级别(即同一个类),并且在Test
变量中实例化Core
对象没有意义。这会在Core
和Test
之间创建一个依赖关系,这从OOP的角度来看是完全错误的。
答案 3 :(得分:0)
不要使用echo或print进行调试!!使用var_dump()!
var_dump($core->test->getVar());
你的错误会变得明显! 还要考虑将此行放在脚本的开头:
error_reporting( E_ALL );
答案 4 :(得分:0)
答案很简单,$variable
没有值,
你需要设置一个这样的值:
$core = new core();
$core->test = new test();
$core->setVar("Something");
print $core->test->getVar(); //Something