在PHP中从父类继承属性,而无需再次调用父方法
如何从“class A”继承在PHP中从父类继承属性,而无需再次调用父方法,php,oop,inheritance,Php,Oop,Inheritance,如何从“class A”继承$variable,而不再次调用someFunction() 我的问题是,我的“A类”将产品添加到篮子中,“B类”将它们插入数据库中。当我调用'class B'中的someFunction()以获取存储在'class A'属性中的所有产品详细信息时,它会再次将产品添加到篮子中,因为该方法被调用了两次,一次在'class A'中,另一次在'class B'中 我可以把所有代码都保存在一个类中,但这会打破SRP原则,不是吗 编辑:上面的代码只是描述我的问题,它不是我真实脚
$variable
,而不再次调用someFunction()
我的问题是,我的“A类”将产品添加到篮子中,“B类”将它们插入数据库中。当我调用'class B'中的someFunction()
以获取存储在'class A'属性中的所有产品详细信息时,它会再次将产品添加到篮子中,因为该方法被调用了两次,一次在'class A'中,另一次在'class B'中
我可以把所有代码都保存在一个类中,但这会打破SRP原则,不是吗
编辑:上面的代码只是描述我的问题,它不是我真实脚本的精确表示,因此它与向篮子中添加产品无关。我只是想让事情简单些。你的
A类
和B类
是两个完全不同的例子。如果您有一个类别A
的实例,您在该类别中所做的任何事情都不会反映在类别B
实例中
扩展时,请将其视为类B
是一个仅使用类a
作为基础模板的不同类
您可以将class A
实例传递到class B
实例,而不是扩展它,这样class B
就可以直接从class A
-实例获取它的数据
例如:
class A
{
public $variable
public function someFunction()
{
$this->variable = 'I am a variable';
}
}
class B extends A
{
public function anotherFunction()
{
parent::someFunction();
$stmt = $this->dbc->prepare('INSERT INTO table(row) VALUES(:variable)');
$stmt->bindParam(':variable', $this->variable);
$stmt->execute();
$stmt = null;
$dbc = null;
}
}
您的
A类
和B类
是两个完全不同的实例。如果您有一个类别A
的实例,您在该类别中所做的任何事情都不会反映在类别B
实例中
扩展时,请将其视为类B
是一个仅使用类a
作为基础模板的不同类
您可以将class A
实例传递到class B
实例,而不是扩展它,这样class B
就可以直接从class A
-实例获取它的数据
例如:
class A
{
public $variable
public function someFunction()
{
$this->variable = 'I am a variable';
}
}
class B extends A
{
public function anotherFunction()
{
parent::someFunction();
$stmt = $this->dbc->prepare('INSERT INTO table(row) VALUES(:variable)');
$stmt->bindParam(':variable', $this->variable);
$stmt->execute();
$stmt = null;
$dbc = null;
}
}
我删除了
parent::someFunction()代码>并且它可以工作,现在看起来很合乎逻辑,因为这段代码恰好再次调用了函数。我认为有必要访问该方法中存储的属性代码>并且它可以工作,现在看起来很合乎逻辑,因为这段代码恰好再次调用了函数。我认为有必要访问该方法中存储的属性。非常感谢!这两种方法都有效,但我只是一个傻瓜,一直在犹豫使用这种或那种方法是否有任何好处。@yendrrek-您当前的设置要求您保持两个对象同步。如果您在类A中执行类B需要的任何操作(如添加值),那么您也需要在类B中手动执行。因此,它在某些情况下似乎是有效的,但它并没有按照您的想法(基于您的问题)工作代码>(轻微的打字错误,我相信OP一定有这个想法)。@Jeto-Darn。谢谢如果您要将其设置为类属性,则应该考虑使用构造函数注入(如通过类构造函数完成的依赖注入)。有关基本示例,请参见。非常感谢!这两种方法都有效,但我只是一个傻瓜,一直在犹豫使用这种或那种方法是否有任何好处。@yendrrek-您当前的设置要求您保持两个对象同步。如果您在类A中执行类B需要的任何操作(如添加值),那么您也需要在类B中手动执行。因此,它在某些情况下似乎是有效的,但它并没有按照您的想法(基于您的问题)工作代码>(轻微的打字错误,我相信OP一定有这个想法)。@Jeto-Darn。谢谢如果您要将其设置为类属性,则应该考虑使用构造函数注入(如通过类构造函数完成的依赖注入)。有关基本示例,请参见。