场景是这个
class a
{
public $val;
}
class b extends a
{
}
class c extends b
{
}
$one = new b();
$one->val = "a value";
$other = new c();
echo $other->val;
// wanted 'a value', got ''
所以我需要的结果是:“一个值”,但当然是空白的。
我需要的是'a'类始终用作'b'中的实例。因此,每当我使用扩展'b'的类时,父'a'类将作为实例固有。
答案 0 :(得分:1)
由于$other = new c();
实际上是在创建新实例,因此无法实现
但是如果你将val声明为静态成员,那么你将得到你想要的结果。
<?
class a
{
public static $val;
}
class b extends a
{
}
class c extends b
{
}
$one = new b();
a::$val = "a value";
echo c::$val;
答案 1 :(得分:1)
如果您阅读关于static关键字的php手册,它会提供您正在尝试执行的操作的示例。您可以在此处阅读:http://www.php.net/manual/en/language.oop5.static.php
以下是他们使用的示例代码。
<?php
class Foo
{
public static $my_static = 'foo';
public function staticValue() {
return self::$my_static;
}
}
class Bar extends Foo
{
public function fooStatic() {
return parent::$my_static;
}
}
print Foo::$my_static . "\n";
$foo = new Foo();
print $foo->staticValue() . "\n";
print $foo->my_static . "\n"; // Undefined "Property" my_static
print $foo::$my_static . "\n";
$classname = 'Foo';
print $classname::$my_static . "\n"; // As of PHP 5.3.0
print Bar::$my_static . "\n";
$bar = new Bar();
print $bar->fooStatic() . "\n";
?>
答案 2 :(得分:1)
以下是没有继承的方法:
class A
{
public $foo;
}
class B {
public function __construct(A $a)
{
$this->a = $a;
}
}
class C {
public function __construct(A $a)
{
$this->a = $a;
}
}
$a = new A;
$b = new B($a);
$c = new C($a);
$b->a->val = 'one value';
echo $c->a->val;
如果您不想首先获取$ a来获得val,您可以通过引用分配
class A
{
public $foo;
}
class B {
public function __construct(A $a)
{
$this->val = &$a->val;
}
}
class C {
public function __construct(A $a)
{
$this->val = &$a->val;
}
}
$a = new A;
$b = new B($a);
$c = new C($a);
$b->val = 'one value';
echo $c->val;
虽然我个人认为第一种方法更易于维护和清晰。