phpマジック変数の使用例の詳細

5072 ワード

この例ではphpマジック変数の使い方を説明します.DIR__php 5です.3新しいのは、皆さんの参考にしてください.具体的な使い方は以下の通りです.
システム定数
__FILE__ 現在のファイル名_LINE__ 現在の行数_FUNCTION__ 現在の関数名_CLASS__ 現在のクラス名_METHOD__ 現在のオブジェクトのメソッド名
詳細な分析
1. __FILE__
ファイルのフルパスとファイル名.含まれるファイルに使用すると、含まれるファイル名が返されます.PHP 4.0より.2から、_FILE__ 常に絶対パス(シンボル接続の場合は解析後の絶対パス)が含まれていますが、その前のバージョンには相対パスが含まれている場合があります.PHP定数dirname(_file_)  __FILE__ :PHPマジック定数と呼ばれ、現在実行されているPHPスクリプトの完全なパスとファイル名を返します.絶対パスが含まれています.
1)dirname(__FILE__) 関数は、スクリプトが存在するパスを返します.ファイルb.phpなどのネットワークの更新には、次の内容が含まれます.

    $basedir = dirname(__FILE__);   
  
echo $basedir 
// ! 
?>

 
私が行ったテストの結果:E:websiteothertestcms
これはaspのserverに相当します.mappthの使い方
b.phpが他のディレクトリのa.phpファイルrequireまたはincludeに参照される場合.変数$basedirの内容は、b.phpが存在するフォルダのパスです.a.phpファイルが存在するディレクトリではありません.
2)dirname(__FILE__) 通常、ファイルの現在のディレクトリからシステムルートディレクトリへのディレクトリ構造が返されます.現在のファイル名は返されません.dirname(__FILE__) 1つ戻ることもあります.(現在のディレクトリ)[b.phpファイルはhttp.confまたはPHP構成開発環境のデフォルトWEBディレクトリの下にあるため

    /** 
  
, , 。
*/
define('ROOT_PATH', dirname(__FILE__) . DIRECTORY_SEPARATOR);
echo ROOT_PATH;
echo "
";
echo __FILE__;
echo "
";
echo dirname(__FILE__);
echo "
";
echo dirname(dirname(__FILE__));
?>

2. __LINE__
ファイルの現在の行番号.この変数はデバッグエラーのときに役立ちます.他のときは、何の役にも立たないので、個人的な観点です.

    echo __LINE__;  //  ,__LINE__      
  
?>

3._CLASS__クラスの名前、PHP 5が返す結果は大文字と小文字を区別する

    class base_class 
  
{
function say_a()
{
echo "'a' �C said the " . __CLASS__ . "
";
}
function say_b()
{
echo "'b' �C said the " . get_class($this) . "
";
}
}
class derived_class extends base_class
{
function say_a()
{
parent::say_a();
echo "'a' �C said the " . __CLASS__ . "
";
}
function say_b()
{
parent::say_b();
echo "'b' �C said the " . get_class($this) . "
";
}
}
$obj_b = new derived_class();
$obj_b->say_a();
echo "
";
$obj_b->say_b();
?>

結果:

   'a' �C said the base_class 
  
'a' �C said the derived_class
'b' �C said the  derived_class
'b' �C said the derived_class

場合によっては、_CLASS_の代わりにget_classを使用することができます.
4._FUNCTION__と_METHOD_
__FUNCTION_:関数名、php 5で返される結果は大文字と小文字を区別する__METHOD_:メソッドでの関数名、php 5で返される結果は大文字と小文字を区別する2つとも取得メソッドの名前ですが、どのような違いがありますか?

    class test 
  
{
function a()
{
echo __FUNCTION__;
echo "
";
echo __METHOD__;
}
}
function good (){
echo __FUNCTION__;
echo "
";
echo __METHOD__;
}
$test = new test();
$test->a();
echo "
";
good();
?>

結果を返します.
a
test::a
good
good
孤立した関数に対しては2つとも関数名を取り出すことができますが、違いはありません.classのメソッドであれば、__FUNCTION__はclassのメソッド名のみを取り出すことができますが、__METHOD__はメソッド名だけでなくclass名も取り出すことができます
5. __DIR__
ファイルが存在するディレクトリ.含まれるファイルで使用される場合、含まれるファイルが存在するディレクトリが返されます.dirname(_FILE_)と等価です.ルートディレクトリでない限り、末尾のスラッシュはディレクトリ名に含まれません.(PHP 5.3.0に追加)5.3以前のバージョンで__DIR__を使用したい場合は、このようにしてください.

    if(!defined('__DIR__')) { 
  
$iPos = strrpos(__FILE__, "/");
define("__DIR__", substr(__FILE__, 0, $iPos) . "/");
}
?>

6. __NAMESPACE__
現在のネーミングスペースの名前(大文字と小文字に敏感).この定数はコンパイル時に定義されています(PHP 5.3.0が追加されました)
7. __STATIC__
classの静的メソッドを呼び出すと、class名を返し、大文字と小文字を区別します.継承で呼び出すと、継承に定義があるかどうかにかかわらず、継承されたclass名を返すことができます.

    //php5.3 
  
class Model
{
public static function find()
{
echo __STATIC__;
}
}
class Product extends Model {}
class User extends Model {}
Product::find(); // "Product"
User::find(); // "User"
?>

phpの中のマジックの方法
__construct()オブジェクトがインスタンス化されると、そのオブジェクトのこのメソッドが最初に呼び出されます.__destruct()オブジェクトの削除またはオブジェクト操作が終了すると、メソッドが呼び出されます.__get()は、存在しないプロパティを読み取りようとすると呼び出されます.__set()は、存在しないプロパティに値を書こうとすると呼び出されます.__call()オブジェクトが存在しないメソッドを呼び出そうとすると、メソッドが呼び出されます._toString()オブジェクトが印刷されたときに呼び出されます__clone()オブジェクトがクローン化されたときに呼び出されます__isset()_unset()_autoload($classname)_sleep()_wakeup()
本稿で述べたphpプログラム設計に役立つことを願っています.