获取“父级创建”对象的属性

时间:2016-03-28 00:54:41

标签: php object backtrace

我有一个对象,我只知道类名,让我们说“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的新手,我想要实现的是什么?还有更好的办法吗?

1 个答案:

答案 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