PHP的magic常量
魔术常数 魔术常量是PHP中预定义的常量,它们会根据使用情况进行更改。它们以双下划线(__)开头,并以双下划线…
魔术常数
魔术常量是PHP中预定义的常量,它们会根据使用情况进行更改。它们以双下划线(__)开头,并以双下划线结尾。
它们与其他预定义常量相似,但是随着它们随上下文更改其值,它们称为魔术常量。
PHP中有九个魔术常数。其中八个魔术常数以双下划线(__)开头和结尾。
- __LINE__
- __FILE__
- __DIR__
- __FUNCTION__
- __CLASS__
- __TRAIT__
- __METHOD__
- __NAMESPACE__
- ClassName :: class
与常规常量不同,所有常量都在编译时而不是运行时解析。魔术常数不区分大小写。
变更日志
Version | Description |
---|---|
5.3.0 | Added __DIR__ and __NAMESPACE__ magic constant |
5.4.0 | Added __TRAIT__ magic constant |
5.5.0 | Added ::class magic constant |
以下示例代码定义了所有常量:
1. __LINE__
它返回使用此常量的文件的当前行号。
例:
1
2
3
4
5
|
<?php
echo “<h3>Example for __LINE__</h3>”;
// print Your current line number i.e;4
echo “You are at line number “ . __LINE__ . “<br><br>”;
?>
|
输出:
Example for __LINE__
You are at line number 4
2. __FILE__:
该魔术常数返回执行文件的完整路径,该文件存储在该路径中。如果在包含中使用它,则返回包含文件的名称。
例:
1
2
3
4
5
|
<?php
echo “<h3>Example for __FILE__</h3>”;
//print full path of file with .php extension
echo __FILE__ . “<br><br>”;
?>
|
输出:
Example for __FILE__
D:xampphtdocsprogrammagic.php
3. __DIR__:
它返回执行文件的完整目录路径。此魔术常数返回的路径等效于dirname(__FILE__)。除非它是根目录,否则此魔术常数不带斜杠。
例:
1
2
3
4
5
6
7
|
<?php
echo “<h3>Example for __DIR__</h3>”;
//print full path of directory where script will be placed
echo __DIR__ . “<br><br>”;
//below output will equivalent to above one.
echo dirname(__FILE__) . “<br><br>”;
?>
|
输出:
Example for __DIR__
D:xampphtdocsprogram D:xampphtdocsprogram
调取文件路径
在require_once
中调取文件路径时,可以使用../退到上级目录,示例如下
1
|
<?php require_once(__DIR__.‘/../../../themes.php’); ?>
|
4. __FUNCTION__:
该魔术常数返回使用该常数的函数名称。如果在任何函数之外使用它,它将返回空白。
例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<?php
echo “<h3>Example for __FUNCTION__</h3>”;
//Using magic constant inside function.
function test(){
//print the function name i.e; test.
echo ‘The function name is ‘. __FUNCTION__ . “<br><br>”;
}
test();
//Magic constant used outside function gives the blank output.
function test_function(){
echo ‘Hie’;
}
test_function();
//give the blank output.
echo __FUNCTION__ . “<br><br>”;
?>
|
输出:
Example for __FUNCTION__
The function name is test Hie
5. __CLASS__:
它返回使用该魔术常数的类名。__CLASS__常量也可用于特征。
例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
<?php
echo “<h3>Example for __CLASS__</h3>”;
class JTP
{
public function __construct() {
;
}
function getClassName(){
//print name of the class JTP.
echo __CLASS__ . “<br><br>”;
}
}
$t = new JTP;
$t->getClassName();
//in case of multiple classes
class base
{
function test_first(){
//will always print parent class which is base here.
echo __CLASS__;
}
}
class child extends base
{
public function __construct() {
;
}
}
$t = new child;
$t->test_first();
?>
|
输出:
Example for __CLASS__
JTP base
6 .__ TRAIT__:
这个魔术常数返回使用它的特征名称。
例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<?php
echo “<h3>Example for __TRAIT__</h3>”;
trait created_trait {
function jtp(){
//will print name of the trait i.e; created_trait
echo __TRAIT__;
}
}
class Company {
use created_trait;
}
$a = new Company;
$a->jtp();
?>
|
输出:
Example for __TRAIT__
created_trait
7 .__METHOD__:
它返回包含此魔术常数的类方法的名称。返回的方法名称与声明的名称相同。
例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<?php
echo “<h3>Example for __METHOD__</h3>”;
class method {
public function __construct() {
//print method::__construct
echo __METHOD__ . “<br><br>”;
}
public function meth_fun(){
//print method::meth_fun
echo __METHOD__;
}
}
$a = new method;
$a->meth_fun();
?>
|
输出:
Example for __METHOD__
method:: construct method:: meth_fun
8. __NAMESPACE__:
它返回使用它的当前名称空间。
例:
1
2
3
4
5
6
7
8
9
10
|
<?php
echo “<h3>Example for __NAMESPACE__</h3>”;
class name {
public function __construct() {
echo ‘This line will print on calling namespace.’;
}
}
$class_name = __NAMESPACE__ . ‘name’;
$a = new class_name;
?>
|
输出:
Example for __NAMESPACE__
This line will print on calling namespace.
9. ClassName :: class:
此魔术常数不会以双下划线(__)开头和结尾。它返回ClassName的完全限定名称。在PHP5.5.0中添加了ClassName::class。这对命名空间类很有用。
例:
1
2
3
4
5
6
7
|
<?php
namespace Technical_Portal;
echo “<h3>Example for CLASSNAME::CLASS </h3>”;
class javatpoint {
}
echo javatpoint::class; //ClassName::class
?>
|
输出:
Example for ClassName::class
Technical_Portaljavatpoint
注意:请记住,命名空间必须是脚本中的第一个语句或在任何声明调用之后,否则它将产生致命错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 wper_net@163.com 删除。
还没有任何评论,赶紧来占个楼吧!