【问题标题】:Syntax for new class declarations in PHPPHP 中新类声明的语法
【发布时间】:2017-03-31 08:06:14
【问题描述】:

我继承了一个之前分配给另一家开发公司的 php 项目,我经常看到非常奇怪的代码实现,这是我以前从未见过的,我认为这可能是错误。也就是说,它们无处不在,服务器日志不会抱怨它们或发出警告。 error_reporting 可能在某个地方被关闭了。

例如,我看到很多这样的类声明:

$registration = new EventRegistration;

这对我来说很奇怪,因为我只见过使用new 完成的类实例化:

$registration = new EventRegistration();

有人可以澄清这是否不正确/不是最佳实践/可以通过吗?

我认为这只是一个可以编译的语法错误,但在技术上是错误的。类似于人们使用$array[key] 而不是$array['key'] 之类的数组语法。对吗?

谢谢。

【问题讨论】:

  • 不,这不是错误或警告或技术上的错误,只有当有任何参数需要传递给类构造函数时才需要大括号
  • 好的,谢谢,我明白为什么没有任何构造函数参数就不需要它了。

标签: php syntax warnings error-reporting maintainability


【解决方案1】:

使用new 关键字,您想创建一个新对象,如果该对象不需要任何参数(如__construct() 方法中所定义),则可以省略()

class foo{
    function __construct(){}
} // valid

class bar{
    function __construct($arg = null){}
} // valid

class foobar{
    function __construct($arg){}
} // not valid

在这种情况下,如果您不传递任何参数,只有foobar 会触发警告。我会说这是一个偏好问题。

但对于 $array[key] 来说,key 是一个常量,可能会触发警告。

【讨论】:

  • 是的,虽然$array[key] 会编译它,但它确实会在打开错误报告的情况下发出警告。这不是很好的语法,但我在项目的其他地方看到过。感谢构造函数的例子,我明白现在发生了什么。
  • 因为 PHP 可以假设(阅读警告),并不意味着它是正确的。
  • 是的,我知道这是不正确的,尽管通过了这就是为什么我也想检查类声明的原因。这个项目有很多需要改变的地方xD
猜你喜欢
  • 2021-11-28
  • 1970-01-01
  • 2013-08-21
  • 2023-04-02
  • 1970-01-01
  • 2018-01-07
  • 2019-06-30
  • 1970-01-01
  • 2012-12-14
相关资源
最近更新 更多