PHP中的getMessage()函数是否被对象静态引用?

时间:2017-01-13 13:30:26

标签: php oop exception

在PHP文档中,Exception类的函数getMessage给出为:

final public string Exception::getMessage ( void )

由于存在范围解析运算符,这意味着它是一个静态函数,当我们捕获catch块中的异常时,我们会执行类似

的操作
$e->getMessage();

但是在PHP中我们不能用对象引用静态函数。

2 个答案:

答案 0 :(得分:0)

这不是因为它是用PHP文档中的范围解析运算符编写的,它是一个静态函数。

如果你仔细观察文档,你会发现每个方法都与该操作符有关 如果您想确定,则需要检查对象本身的文档:https://secure.php.net/manual/en/class.exception.php

在那里你可以看到:

  

/ *方法* /
  public __construct([string $ message =“”[,int $ code = 0 [,Throwable $ previous = NULL]]])
  final public string getMessage(void)
  最终公开异常getPrevious(void)
  最终公共混合getCode(void)
  final public string getFile(void)
  final public int getLine(void)
  final public array getTrace(void)
  final public string getTraceAsString(void)
  public string __toString(void)
  final private void __clone(void)

如果有静态方法,则会在此处写入。

另一个例子是DateTime对象:https://secure.php.net/manual/en/class.datetime.php
在这里,您可以看到关键字static位于方法列表中。

答案 1 :(得分:0)

范围解析运算符::需要用于调用静态方法,因为没有关联的实例可以从中调用它们。

类似地,它在描述方法的签名时使用,因为没有实例可以使用->(对象范围)运算符。但它没有说或暗示方法是静态的。

static关键字就是这样做的。 getMessage不是静态方法,您不应该静态调用它。 Exception类没有static方法或属性。 Linky