PHP来自扩展类的变量

时间:2011-03-07 16:01:05

标签: php class oop

我无法从父类中检索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();

任何帮助??

5 个答案:

答案 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中的publicprotectedprivate来提供对变量的可见性。在您的情况下,您希望使用publicprotected

最后,您的代码没有多大意义。通常getter和setter定义在同一级别(即同一个类),并且在Test变量中实例化Core对象没有意义。这会在CoreTest之间创建一个依赖关系,这从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