PHP マジック定数
1,__FILE__
ファイルの絶対パスとファイル名。インクルードされたファイル内で使用された場合、インクルードされたファイルの名前を返します。 PHP 4.0.2 以降、__FILE__? には常に絶対パス (またはシンボリック リンクの場合は解決された絶対パス) が含まれますが、以前のバージョンでは相対パスが含まれる場合がありました。
この変数は私が最もよく使うものであり、おそらく誰もが最もよく使うものです。
Web サーバーはすべて documentroot を指定しますが、サーバーごとに documentroot 設定が異なる場合があります。この場合、パスが異なるため、Web サイトを別のサーバーに移動することができます。
<?php /** 在你的公用的配置文件中,来设置你的根目录,这样就不用担心经常搬家了。 */ define('ROOT_PATH', dirname(__FILE__) . DIRECTORY_SEPARATOR); echo ROOT_PATH; echo "<br>"; echo __FILE__; echo "<br>"; echo dirname(__FILE__); echo "<br>"; echo dirname(dirname(__FILE__)); ?>?2、__LINE__
ファイル内の現在の行番号。
<?php echo __LINE__; //显示,__LINE__所在的行号 ?>?3,__CLASS__
クラスの名前、PHP5 によって返される結果は大文字と小文字が区別されます
<?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?場合によっては、__CLASS__ の代わりに get_class を使用できます。
4、__FUNCTION__ および __METHOD__
__FUNCTION__: 関数名、php5 で返される結果は大文字と小文字が区別されます
__METHOD__: メソッド内の関数名、php5 で返される結果は大文字と小文字が区別されます
どちらも取得方法の名前です。違いは何ですか?
<?php class test { function a() { echo __FUNCTION__; echo "<br>"; echo __METHOD__; } } function good (){ echo __FUNCTION__; echo "<br>"; echo __METHOD__; } $test = new test(); $test->a(); echo "<br>"; good(); ?> 返回结果: a test::a good good? 分離関数と比較すると、どちらもクラス内のメソッドの場合は関数名を抽出することができますが、__METHOD__ はメソッドを抽出することしかできません。 name 、クラス名 を抽出することもできます。
5、__DIR__
ファイルが配置されているディレクトリ。インクルードされたファイル内で使用された場合、インクルードされたファイルが配置されているディレクトリを返します。これは dirname(__FILE__) と同等です。ルート ディレクトリでない限り、ディレクトリ名には末尾のスラッシュは含まれません。 (PHP 5.3.0 の新機能)
5.3 より前のバージョンで __DIR__ を使用したい場合は、次のようにすることができます
<?php if(!defined('__DIR__')) { $iPos = strrpos(__FILE__, "/"); define("__DIR__", substr(__FILE__, 0, $iPos) . "/"); } ?>?6,__NAMESPACE__
現在の名前空間の名前 (大文字と小文字が区別されます)。この定数はコンパイル時に定義されます (PHP 5.3.0 の新機能)
7,__STATIC__
当你调用class的静态方法时,返回class名称,区分大小写。如果在继承中调用的话,不管在继承中有没有定义,都能返回继承的class名。
<?php //php5.3 class Model { public static function find() { echo __STATIC__; } } class Product extends Model {} class User extends Model {} Product::find(); // "Product" User::find(); // "User" ?>?