让我们说这是我的PHP课程:
Class Test {
public function __construct() {}
public function test() {
$myInfoMsg = "{self::class}: New User created";
echo $myInfoMsg;
}
public function test2() {
$myInfoMsg = self::class . " : New User created";
echo $myInfoMsg;
}
}
$a = new Test();
$a->test();
$a->test1();
我为test()
获得的输出如下:
{self::class}: New User created
对于test2()
,我得到以下输出:
Test: New User created
那么为什么不self::class
在test()
打印课程名称?
答案 0 :(得分:1)
你不能这样做。来自documentation:
复杂(卷曲)语法
这不称为复杂,因为语法很复杂,但因为它允许使用复杂的表达式。
可以通过此语法包含任何具有字符串表示形式的标量变量,数组元素或对象属性。只需以与字符串外部相同的方式编写表达式,然后将其包装在{和}中。 由于{无法转义,因此仅当$紧跟{。
后才会识别此语法。
您的问题的替代方案是:
ip:port/myapp/bo/bo
答案 1 :(得分:0)
self::class
是一个关键字(嗯,两个关键字)。它在编译阶段被替换为一个字符串,该字符串包含使用它的类的全名。
"self::class"
是double quoted string。
"{self::class}"
也是双引号字符串。即使{self::class}
看起来类似于variable in a double quoted string,它也不是变量,也不会以任何特殊方式进行解释。这正是你在这里看到的字符串,无论它出现在什么上下文中。
双引号字符串中只有变量为identified and replaced。