我有一个对象,我只知道类名,让我们说“A”。我正在尝试访问此对象的属性。不幸的是,我试图从第一个对象创建的另一个对象实例访问它们,这些对象实例是完全不同的类(也没有扩展或相关)。下面简化代码来解释这种情况。
Class A {
public $var; //some important stuff
function createObjectB() {
$b = new B();
}
}
Class B {
// a totally different class not related with A
}
这是CMS中组件的第三方代码,所以我不能乱用核心代码(或者至少我认为?)试图将属性与B创建的对象一起传递,而不会在以后导致错误如果这个组件得到更新。
由于稍后在B类中调用的“布局模板”文件,我可以从B类访问该对象,如果核心代码得到更新,则不会触及该文件。这样我就无法触及这些类。
使用来自debug_backtrace()
的{{1}}我可以看到我需要的对象属性的一些后退,但我认为以这种方式使用函数来获取我需要的信息是相当hacky,而且我认为这也是一个非常密集的功能。
我是PHP的新手,我想要实现的是什么?还有更好的办法吗?
答案 0 :(得分:0)
遗传是一种成熟的编程原则,PHP在对象建模中使用它。这个原则会影响许多类和对象之间的相互关系。
例如,在扩展类时,子类继承父类的所有公共和受保护方法。除非类覆盖这些方法保留其原始功能。
这对于定义和抽象功能非常有用,并允许在类似对象中实现其他功能,而无需重新实现所有共享功能。
重要说明:除非使用自动加载,否则必须先定义类才能使用。如果类扩展另一个类,则必须在子类结构之前声明父类。此规则适用于从其他类和接口继承的类。
<?php
class Foo
{
public function printItem($string)
{
echo 'Foo: ' . $string . PHP_EOL;
}
public function printPHP()
{
echo 'PHP is great.' . PHP_EOL;
}
}
class bar extends Foo
{
public function printItem($string)
{
echo 'Bar: ' . $string . PHP_EOL;
}
}
$foo = new Foo();
$bar = new Bar();
$foo->printItem('baz'); // Salida: 'Foo: baz'
$foo->printPHP(); // Salida: 'PHP is great'
$bar->printItem('baz'); // Salida: 'Bar: baz'
$bar->printPHP(); // Salida: 'PHP is great'
?>
您必须知道可以将新对象生成到另一个类中。但是您可以继承A类到B类的所有属性,而无需创建新实例。例如:
<?php
Class A {
public function something() {
$var = 'Hello!';
return $var;
}
}
Class B extends A {
function createObjectB() {
echo $this->something().' I am learning classes in php';
}
}
$b = new B;
$b->createObjectB();
?>
有关详细信息,请访问此页http://php.net/manual/es/language.oop5.inheritance.php。