最新消息: 新版网站上线了!!!

PHP中魔术变量小结

PHP中,有不少很好用的魔术变量,用好之,能事半功倍,下面小结之: 


1 _LINE_ 
  显示当前代码的行数: 
  echo "This is line number : ". __LINE__; 

2 _FILE_ 
   显示当前文件的路径

     dirname(__FILE___) 函数返回的是脚本所在在的路径。 
    比如文件 b.php 包含如下内容: 
    <?php 
    $basedir = dirname(__FILE__); 
    ?> 
    如果b.php被其他目录里的a.php文件require 或者 include 去引用的话。 
    变量$basedir 的内容还是b.php所在的那个文件夹的路径。 
    而不是变成a.php文件所在的目录。 
    dirname(__FILE__) 一般会返回文件所的当前目录到系统根目录的一个目录结构。 
    不会返回当前的文件名称。 
    dirname(__FILE__) 也可能返回一个 . (当前目录) 
    [原因是 b.php 文件在 http.conf 或者 PHP 配置开发环境的默认WEB目录下. 
    比如 WEB_ROOT 为: "C:/root/www/".] 
    b.php文件路径为: "C:/root/www/b.php". 

    使用方法提示,  
    如果重复一次可以把目录往上提升一个层次: 
    比如:$d = dirname(dirname(__FILE__)); 
    其实就是把一个目录给dirname()做参数了.因为dirname()返回最后的目录不带\\或者是/ 
    所以重复使用的时候可以认为 dirname() 把最下层的目录当成文件名来处理了.照常返回 
    当前目录的上级目录.这样重复就得到了它的上一级的目录. 

    包含得到上一级目录的文件 
    include(dirname(__FILE__).'/../filename.php'); 

3 _METHOD_ 
   显示当前方法的名,比如 
   class Magicconstant 

    function __construct() 
    { 
      echo "This is function a"; 
    } 
    function b() 
   {
     echo "<br/>"; 
     echo "This is function b"; 
     echo "<br/>"; 
     echo __METHOD__; 
   } 

$cm = new Magicconstant(); 
$cm->b(); 

显示 
   This is function a 
  This is function b 
  Magicconstant::b 

4 _FUNCTION_ 
   显示当前所在函数的名 
  function b() 
  { 
  echo "<br/>"; 
echo "This is function b"; 
echo "<br/>"; 
echo __FUNCTION__; 
  } 
输出: 
   This is function b 
Magicconstant::b 

5 _DIR_ 
   显示当前目录名,如 
  echo "The directory name is : ". __DIR__; 
输出: 
  The directory name is : D:\wamp\www 

6 _CLASS_ 
   显示当前的类 
class Magicconstant 

function __construct() 

echo "The class name is : ".__CLASS__; 


$cm = new Magicconstant(); 
  显示: 
  The class name is : Magicconstant 

7 _NAMESPACE_ 
   显示当前命名空间 
namespace MagicConstant 

   echo "The namespace is : ".__NAMESPACE__; 

输出:  
  The namespace is : MagicConstant 

8 _sleep_ 
  _sleep_用在将类序列化之前, 
<?php 
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');  
                        // This will serialize only address and Phone number but not Name 



?> 
<?php 
$User = new User(); 
$User->setName('Avinash'); 
$User->setAddress('Address Here'); 
$User->setPhone('1234567890'); 

$serialData = serialize($User); 
echo $serialData; 
?> 

OutPut: O:4:"User":2:{s:11:"userAddress";s:12:"Address Here";s:9:"userPhone";s:10:"1234567890";} 

程序运行时, serialize() 检查类中是否有 __sleep() ,如果有,则该函数将在任何序列化之前运行. 该函数必须返回一个需要进行序列化保存的成员属性数组,并且只序列化该函数返回的这些成员属性. 该函数有两个作用: 第一. 在序列化之前,关闭对象可能具有的任何数据库连接等. 第二. 指定对象中需要被序列化的成员属性,如果某个属性比较大而不需要储存下来,可以不把它写进__sleep()要返回的数组中,这样该属性就不会被序列化 


又如: 
class Test { 

public $mySecret; //我的秘密不想让人知道 

public function __construct($secret) { 

$this->mySecret = $secret; 



public function __sleep() { 

$this->mySecret = "你休想知道我的秘密!"; 

return array('mySecret'); //一定要返回变量,不然返回的是个空,所以序列化也就没有东西了。 





$test = new Test("我的心里话 我爱某某某"); 

echo serialize($test); //输出 O:4:"Test":1:{s:8:"mySecret";s:28:"你休想知道我的秘密!";} 


_wakeup_ 
用在反序列化时: 
<?php 
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');  
                       // This will serialize only address and Phone number but not Name 


function __wakeup() 

echo "In Wakeup function"."<br/>"; 



?> 
<?php 
$User = new User(); 
$User->setName('Avinash'); 
$User->setAddress('Address Here'); 
$User->setPhone('1234567890'); 

$serialData = serialize($User); 
echo $serialData; 
echo "<br/>"; 
var_dump(unserialize($serialData)); 
?> 

Output: 
In Wakeup function 
object(User)#2 (3) { 
  ["userName"]=> 
  string(0) "" 
  ["userAddress"]=> 
  string(12) "Address Here" 
  ["userPhone"]=> 
  string(10) "1234567890" 
}

转载请注明:谷谷点程序 » PHP中魔术变量小结