成员变量和成员函数具有相同的名称

use*_*729 15 php

class test {
    public $isNew;
    public function isNew(){}
}

$ins = new test();
$ins->isNew
Run Code Online (Sandbox Code Playgroud)

在这里,php如何解析$ins->isNew

Gum*_*mbo 31

PHP不是函数编程语言,其中函数也是数据.因此$ins->isNew,无论是引用方法isNew还是属性都不会有歧义isNew.$ins->isNew始终是属性和$ins->isNew()方法调用.

  • @ T.Todua不,因为字段和方法不共享相同的命名空间,```字符的存在告诉PHP搜索方法,这将无法找到.你必须首先读取属性而不是调用函数 - 例如像这样`($ this-> isNew)()`...第一个括号将从类实例读取属性并创建可调用的表达式,然后调用它.其他选项是将`isNew`读入临时变量然后使用该变量作为临时变量function:`$ method = $ this-> isNew; $ method();` (3认同)
  • 嗯.. 另外,如果存在: `$this->isNew = function() { .... };` 那么呢?`isNew()` 触发变量 d 函数的方法? (2认同)

dna*_*irl 5

$ins->isNew是变量. $ins->isNew()是功能.