子类影响父类

时间:2015-10-16 11:45:17

标签: php class

这是我的代码:

$myParent::$db

为什么b会更改为Set objExcel = GetObject(, "Excel.Application") Set WB = objExcel.ActiveWorkbook WScript.Echo "Hello" + WB.Name WScript.Echo "number of excel" + WB.Count ?如何预防?

3 个答案:

答案 0 :(得分:0)

为什么?

static $db = null;

$dbstatic,它未与实例相关联 self::$db = 'b';将更改$db的唯一且共享的实例。

如何预防?

你不能。它是static字段的工作方式。
顺便说一句,从实例(static)调用$aa::field并不是一个好主意。

请查看documentation about static in PHP,因为您可能不了解其工作原理。

答案 1 :(得分:0)

您正在使用静态变量。这些是类级别并在所有实例中共享。您可能希望将它们更改为实例变量...请参阅下文。

<?php
class Parent1
{
    public $db = null;

    public function __construct()
    {
        $this->db = 'a';
    }
}

class Child extends Parent1
{

    public function __construct()
    {
        parent::__construct();
        $this->db = 'b';
    }
}

但是,写入$ myChild-&gt; db会从父项更改变量,因为它是一个继承变量,但它不会影响$ myParent的$ db值。

答案 2 :(得分:0)

我找到了解决方案。我在儿童中重新宣布静态 - 现在它起作用了。 感谢您解释静态

class Parent1
{
    static $db = null;

    public function __construct()
    {
        self::$db = 'a';
    }
}

class Child extends Parent1
{
    static $db = null;

    public function __construct()
    {
        parent::__construct();
        self:$db=parent::$db;
        self::$db = 'b';
    }
}

$myParent = new Parent1();
echo $myParent::$db; //"a"

$myChild = new Child();
echo $myChild::$db; //"b"
echo $myParent::$db; //"a" => as it should