预定义常量

PHP 为其运行的任何脚本提供大量预定义常量。但是,这些常量中的许多是由各种扩展创建的,只有在这些扩展可用时才会存在,无论是通过动态加载还是因为它们已编译在内。

添加注释

用户贡献注释 5 个注释

291
vijaykoul_007 at rediffmail dot com
18 年前
之间的区别
__FUNCTION__ 和 __METHOD__ 就像在 PHP 5.0.4 中一样

__FUNCTION__ 仅返回函数名称

而 __METHOD__ 返回类名称以及函数名称

类技巧
{
函数 doit()
{
echo __FUNCTION__;
}
函数 doitagain()
{
echo __METHOD__;
}
}
$obj=new trick();
$obj->doit();
输出将是 ---- doit
$obj->doitagain();
输出将是 ----- trick::doitagain
49
Tomek Perlak [tomekperlak at tlen pl]
17 年前
__CLASS__ 魔术常量很好地补充了 get_class() 函数。

有时您需要知道两者
- 继承类的名称
- 实际执行的类的名称

这是一个展示可能的解决方案的示例

<?php

class base_class
{
function
say_a()
{
echo
"'a' - said the " . __CLASS__ . "<br/>";
}

function
say_b()
{
echo
"'b' - said the " . get_class($this) . "<br/>";
}

}

class
derived_class extends base_class
{
function
say_a()
{
parent::say_a();
echo
"'a' - said the " . __CLASS__ . "<br/>";
}

function
say_b()
{
parent::say_b();
echo
"'b' - said the " . get_class($this) . "<br/>";
}
}

$obj_b = new derived_class();

$obj_b->say_a();
echo
"<br/>";
$obj_b->say_b();

?>

输出应大致如下

'a' - said the base_class
'a' - said the derived_class

'b' - said the derived_class
'b' - said the derived_class
11
php at kenman dot net
10 年前
刚刚了解了关于 __FILE__ 和较新的 __DIR__ 在从网络共享运行代码时的有趣小细节:当从共享上下文中执行时,常量将返回 *共享* 路径。

示例

// 正常上下文
// 称为 "php -f c:\test.php"
__DIR__ === 'c:\';
__FILE__ === 'c:\test.php';

// 网络共享上下文
// 称为 "php -f \\computerName\c$\test.php"
__DIR__ === '\\computerName\c$';
__FILE__ === '\\computerName\c$\test.php';

注意:realpath('.') 似乎始终返回实际的文件系统路径,无论执行上下文如何。
4
Sbastien Fauvel
8 年前
请注意,在使用特征时使用 __CLASS__ 和 __METHOD__ 时存在一个小小的不一致性(标准 php 7.0.4):虽然 __CLASS__ 按广告宣传的方式工作并动态返回特征正在使用的类的名称,但 __METHOD__ 实际上会将特征名称放在前面而不是类名称!
-1
public at taliesinnuin dot net
4 年前
如果您将 PHP 与 fpm 一起使用(在当今时代很常见),请注意 __DIR__ 和 __FILE__ 将返回基于 fpm 根的值,这可能与它在文件系统中的实际位置不同。

如果部署一个应用程序,其中 web 根目录中的 php 文件会从外部拉取 PHP 文件(非常常见的情况),这可能会导致暂时的困惑。您可能想知道为什么 __DIR__ 返回 "/",而文件本身位于 /var/www/html 或其他位置。

您可以通过让 NGINX 明确地在 fastcgi 请求中添加路径的必要部分来处理这种情况,然后您可以将 FPM 进程/服务器/容器的根设置为除 web 根目录之外的其他位置(只要没有其他方式使其可以公开访问)。

希望这能为将使用 __DIR__ 的代码迁移到 FPM 的人节省五分钟。
To Top