这是我的代码:
$myParent::$db
为什么b
会更改为Set objExcel = GetObject(, "Excel.Application")
Set WB = objExcel.ActiveWorkbook
WScript.Echo "Hello" + WB.Name
WScript.Echo "number of excel" + WB.Count
?如何预防?
答案 0 :(得分:0)
为什么?
static $db = null;
$db
是static
,它未与实例相关联
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