【问题标题】:does var_dump() shows class properties?var_dump() 是否显示类属性?
【发布时间】:2021-05-19 19:36:54
【问题描述】:

如果我在某个班级使用var_dump,请说DateTime

<?php

$date = new DateTime();

var_dump($date);

我明白了

/var/www/php/test/index.php:5:
object(DateTime)[1]
  public 'date' => string '2021-02-16 23:23:10.768097' (length=26)
  public 'timezone_type' => int 3
  public 'timezone' => string 'Europe/Berlin' (length=13)

我认为有 3 个公共属性。所以我尝试访问它们:

<?php

$date = new DateTime();

var_dump($date);

//example of accessing public $date; of class DateTime;
echo $date->date;

但我得到了Undefined property: DateTime::$date in /var/www/php/test/index.php on line 7

那我应该如何解读var_dump(some class)

【问题讨论】:

  • 您运行的是什么版本的 PHP?你的操作系统是什么?我正在从命令行运行 PHP 7.3.24,echo $date-&gt;date 显示 2021-02-16 22:36:17.973299
  • php 7.4.9。 5.8.0-43-generic #49-Ubuntu SMP Fri Feb 5 03:01:28 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

标签: php class var-dump


【解决方案1】:

var_dump() 显示公共和私有属性。

对于最高 7.3 的 PHP,date 是 DateTime 的公共属性。

从 PHP 7.4 开始,date 是私有属性,尝试访问它会返回 Undefined property 消息。

https://3v4l.org/MW498

请注意,DateTime 的 PHP 手册中没有记录这些属性,因此您对它们执行的任何操作都可能会中断,恕不另行通知。

【讨论】:

  • 那么为什么 var_dump 显示为公开的,如果它是私有的呢?
  • 或者 var_dump 是否显示旧版本的 DateClass?
  • 我没有答案,只是观察到 PHP 内置函数和类并不总是遵循用 PHP 编写的类和函数所遵循的相同规则。
  • 您能否详细说明您的陈述“内置函数不像类/函数那样服从”?我认为有一个 php 标准规定了内置函数和其他函数(类、函数)的语义。还是我错了?
  • PHP 最初是作为 PERL 脚本的集合。它现在主要(完全?)用 C++ 编写,并且过渡并不总是像它可能的那样严格。这就是为什么我们有大量函数,有时命名约定和参数列表不一致。 (将字符串函数视为命名不一致的示例)。 PHP 7 和 PHP 8 在清理该行为方面已经走了很长一段路。更多...
猜你喜欢
  • 2011-09-08
  • 1970-01-01
  • 2011-04-04
  • 1970-01-01
  • 1970-01-01
  • 2011-09-08
  • 2014-06-14
  • 2015-09-29
  • 1970-01-01
相关资源
最近更新 更多