PHP のマジック変数の概要
PHP には便利なマジック変数がたくさんあり、それらをうまく使えば、半分の労力で 2 倍の結果を得ることができます。
1 _LINE_
の行数を表示します。現在のコード:
echo "これは行番号です: ". __LINE__;
2 _FILE_
現在のファイルのパスを表示します
3 _METHOD_
の名前を表示します現在のメソッド (
class Magicconstant
{
function __construct()
{
echo "This is function a";
}
function b() {
echo "
";
echo "これは関数 b です";
echo "
";
echo __METHOD__;
}
}
$cm = new Magicconstant();
$cm->b();
Show
これは関数 a
これは関数 b
Magicconstant::b
4 _FUNCTION_
表示 現在の関数の名前
function b()
{
echo "
";
echo "これは関数 b です";
echo "
echo __FUNCTION__;
}
出力:
これは関数 b です
Magicconstant::b
5 _DIR_
echo "ディレクトリ名は : " のように、現在のディレクトリ名を表示します。 __DIR__;
出力:
ディレクトリ名は : D:wampwww
6 _CLASS_
現在のクラスを表示します
class Magicconstant
{
function __construct()
{
echo "クラス名は : ".__CLASS__;
}
}
$cm = new Magicconstant();
表示:
クラス名は次のとおりです: Magicconstant
7 _NAMESPACE_
現在の名前空間を表示します
名前空間 MagicConstant
{
echo "名前空間は : ".__NAMESPACE__;
}
出力:
名前空間は次のとおりです: MagicConstant
8 _sleep_
_sleep_ はシリアル化前に使用されますクラス
class User
{
public $userName = '';
public $userAddress = '';
public $userPhone = '';
public function setName($name='')
{
$this->userName = $name;
}
function setAddress($address) ='')
{
$this->userAddress = $address;
}
function setPhone($phone='')
{
$this- >userPhone = $phone;
}
function __sleep()
{
return array('userAddress','userPhone')
; // これはアドレスのみをシリアル化します電話番号はありますが、名前はありません
}
}
?>
$User = new User();
$User->setName ('Avinash');
$User->setAddress(' ここのアドレス');
$User->setPhone('1234567890');
$serialData = Serialize($User );
echo $serialData;
?>
OutPut: O:4:"User":2:{s:11:"userAddress";s:12:"ここにアドレス" ;s:9:"userPhone";s:10:"1234567890"; }
プログラムの実行中に、serialize() はクラスに __sleep() があるかどうかを確認します。この関数は、シリアル化して保存する必要があるメンバーを返す必要があり、この関数によって返されるこれらのメンバーのプロパティのみをシリアル化します。 1 つ目は、シリアル化の前に、データベース接続を閉じることです。 2 つ目は、シリアル化する必要があるオブジェクトの属性を指定することです。属性が比較的大きく、格納する必要がない場合は、__sleep() によって返される配列に書き込むことができません。 、属性がシリアル化されないようにします
別の例:
class Test {
public $mySecret //私の秘密を誰にも知られたくない
パブリック関数 __construct($secret) {
$this ->mySecret = $secret;
}
パブリック関数 __sleep() {
$this->mySecret = "私の秘密を知りたくないのですね!";
return array('mySecret') // 必ず変数を返してください。そうでない場合は、何も返さないので、シリアル化には何もありません。
}
}
$test = new Test("心の底から、私は誰々が大好きです");
echoserialize($test ); //OutputO:4:"Test":1:{s:8:"mySecret";s:28:"私の秘密を知りたくないでしょう!";}
_wakeup_
デシリアライズ時に使用されます:
class User
{
public $userName = '';
public $userAddress = '';
public $ userPhone = '';
public function setName($name='')
{
$this->userName = $name;
}
function setAddress($address='')
{
$this->userAddress = $address;
}
function setPhone($phone='')
{
$this->userPhone = $phone;
}
function __sleep()
{
return array('userAddress','userPhone');
// これにより、住所と電話番号のみがシリアル化されますが、名前はシリアル化されません
}
function __wakeup()
{
echo "ウェイクアップ関数中"
}
}
?>
$User = new User();
$User->setName('Avinash ');
$User->setAddress('ここにアドレス');
$User->setPhone('1234567890');
$serialData = Serialize($User);
echo $serialData;
echo "
";
var_dump(unserialize($serialData));
?>
出力:
ウェイクアップ中function
object(User)#2 (3) {
["userName"]=>
string(0) ""
["userAddress"]=>
string( 12) "ここのアドレス"
["userPhone"]=>
string(10) "1234567890"
}