PHP:继承和实例属性
这可能是一个微不足道的问题,但我对php还不熟悉,所以请帮助我理解一些基本概念。以下是我的问题: 我创建了一个类a,而对于另一个类B,我继承了a,这样:PHP:继承和实例属性,php,inheritance,instance-variables,Php,Inheritance,Instance Variables,这可能是一个微不足道的问题,但我对php还不熟悉,所以请帮助我理解一些基本概念。以下是我的问题: 我创建了一个类a,而对于另一个类B,我继承了a,这样:类B扩展了a。现在对于类A,我需要在任何时候只运行一个实例。因此,我通过以下方式实现这一目标: class A { private static $instance = NULL; static public function getInstance() { if
类B扩展了a
。现在对于类A,我需要在任何时候只运行一个实例。因此,我通过以下方式实现这一目标:
class A {
private static $instance = NULL;
static public function getInstance()
{
if (self::$instance === NULL)
self::$instance = new x();
return self::$instance;
}
...
}
然后从程序调用:
$a = A::getInstance();
现在,在主程序和类A的某个地方,我需要为B声明一个对象。这样:
$b = new B();
我现在想要实现的是$b继承类A的所有属性,这些属性是在A的唯一现有实例中设置的。目前,情况并非如此。
请建议!
使用与
函数getInstance()
帮助相同的逻辑为类a定义构造函数吗?在B构造函数中尝试类似的方法:
__construct(){
$toCopy = A::getInstance();
$this->setAttribute1($toCopy->getAttribute1());
$this->setAttribute2($toCopy->getAttribute2());
...
}
然而,也许你甚至不需要:
Class B{
private static $_attr1;
private static $_attr2;
public static function getAttr1(){
return self::$_attr1;
}
public static function getAttr1(){
return self::$_attr1;
}
}
有几种方法可以实现这一点 独生子女 为了确保单例模式,在内部委派大量继承可能更容易。只需在类B中加载singleton A对象,并通过magic方法引用其属性和方法
class B {
function __construct()
{
$this->singletonObj = A::getInstance();
}
function __get($field)
{
return $this->singletonObj->$field;
}
function __call($func, $args)
{
return call_user_func_array(array($this->singletonObj, $func), $args);
}
....
}
静态特性
使用静态属性定义类A
class A {
protected static $var = null;
....
}
class B extends A {
.... // has all the same static values as A
}
不,我需要A类实例。它包含了很多对我的程序很重要的信息。但唯一的问题是,它必须在任何特定时间只有一个实例在运行。因此,当我在B上创建一个新实例时,正如我所想,当访问a的属性时,会得到不需要的默认值。。这些值必须与A的当前运行实例相同编辑后可提供2种解决方案感谢Arthur的帮助。虽然我认为你的第一个解决方案确实解决了我的问题,但它看起来效率不高!将不得不尝试其他我认为静态的方法,但它们在我的情况下不起作用,但是我认为第一个解决方案应该有效,非常感谢!:)