PHP 一个实例 returns 一个带有 #5 的对象

PHP one instance returns an object with #5

我在 php 中学到的关于对象的知识是带有数字 (#n) 的散列指向实例化时间,例如:

如果我们有这样的东西 object(Index)#5 (1) 意味着我们有 5 个 Index 对象的实例。

但是在我的例子中,我正在开发自定义 PHP MVC 我只实例化了 class 一次(我确定只有一次。模型 class 直接在控制器)但我得到了一个像这样的对象

object(Timino\App\Models\Index)#5 (1)

为什么会这样?

名称空间会影响这个吗! ?

这对表演有影响吗?!

命名空间应该不会影响这一点。对于性能问题,脚本运行时的对象数量只会在脚本接近或超过最大内存限制时产生影响。仅供参考,这里有一些 considerations about performance.

一个简单的例子 show/explain "object counter":

class TestClass {
    public $number = 2;
}

class ClassInner {
    protected $number = 5;
    protected $innerObject;

    public function __construct() {
        $this->innerObject = new \stdClass();
    }
}


$testInstance = new TestClass();
$classInner = new ClassInner();

$classInner2 = new ClassInner();
$testInstance2 = new TestClass();

$classInner3 = $classInner2;

echo '<pre>'; 
var_dump($testInstance);
var_dump($classInner);

var_dump($classInner2);
var_dump($testInstance2);
var_dump($classInner3);

echo '</pre>';

应该会产生这个输出。请查看实例的顺序和计数:

object(TestClass)#1 (1) {
  ["number"]=>
  int(2)
}
object(ClassInner)#2 (2) {
  ["number":protected]=>
  int(5)
  ["innerObject":protected]=>
  object(stdClass)#3 (0) {
  }
}
object(ClassInner)#4 (2) {
  ["number":protected]=>
  int(5)
  ["innerObject":protected]=>
  object(stdClass)#5 (0) {
  }
}
object(TestClass)#6 (1) {
  ["number"]=>
  int(2)
}
object(ClassInner)#4 (2) {
  ["number":protected]=>
  int(5)
  ["innerObject":protected]=>
  object(stdClass)#5 (0) {
  }
}