天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

PHP函數常用用法小結

魔術函數

 

魔術函數是php中內置的語言特性,當程序執行到某種情況時,如果定義了這些魔術函數(php手冊中稱之為“Overloading),則php會調用他們,同時也會傳入相應的參數,可以認為是php執行過程中的鉤子函數。常見的魔術函數有__construct, __destruct , __call, __get, __set, __isset, __unset __sleep, __wakeup, __toString, __clone 以及__autoload 。它們 可以用來自動加載包含文件,實現延遲執行(類似于.NET中的屬性訪問器)、垃圾回收、對象clone等操作,舉個__autoload的例子,其他魔術函數參見 Magic Method

 

__autoload($class_name):用來自動加載包含文件,省得includerequire,對性能有一定影響,但一般情況下可忽略。

 

下面是一個簡單的例子

function __autoload($class_name)  

{

    require_once $class_name . '.class.php';

}

把它放入common.php等全局包含文件中,當新建一個對象時,比如 $obj=new Class_A,如果php無法找到Class_A,則會把"Class_A" 作為參數$class_name,執行 __autoload函數。這樣就可以達到自動包含頭文件的目的了。

 

另外附贈幾個常量和函數:

__FILE__ :魔術常量,獲取當前源代碼文件的路徑(含文件名)

__CLASS__:魔術常量,獲取當前類的類名(區分大小寫的)。

array get_included_files ( void ):內置函數,返回通過include(), include_once(), require() require_once()包含的文件列表,但不包括通過php.ini配置文件中所設置的auto_prepend_file項。另外get_required_files()只是get_included_files ( void )的別名。

string dirname ( string path ):返回路徑中的目錄部分。

 

匿名函數

 

php5.3以前使用匿名函數,可以通過create_function()來創建匿名函數,

$func=create_function('$a,$b', '

if ($a == $b)

{

        return 0;

}

 return ($a< $b) ? -1 : 1;

');

php5.3中,可以直接使用lamda表達式

$func=function($a,$b)

{

if ($a == $b)

{

        return 0;

}

 return ($a< $b) ? -1 : 1;

}

然后可以作為參數傳入其他函數,如:usort($arr,$func); 也可以直接調用,$func(3,4);

 

php5.3中使用閉包

function foo($arg1)

{

$var=3;

$inner=function($innerArg) use($arg1,$var)

{

   return $innerArg+$arg1/$var;

};

echo $inner(5);

}

閉包被當成一個內置類,但是沒有Javascript那么靈活,這個類不能有屬性。$inner->a=5;是非法的。

 

嵌套函數

 

嵌套函數可以在父函數體里面定義函數,如:

function outer()

{

    $out_var=1;

    function inner()

    {

        var_dump($out_var);//輸出NULL,無法訪問到$out_var,聲明global也不行,$out_var不是全局變量

        echo "call inner/n";

    }

    //echo "call outer/n";

 

    inner();//如果不調用inner(),則在訪問outer()時也不會被調用

}

 

outer();

inner();//雖然,函數是全局的,必須先調用outer(),否則inner()調用會報錯(函數未定義)

 

條件函數

 

$debug=false;

if($debug===true)

{

    function foo()

    {

        echo "foo";

    }

}

 

foo();

 

相當于條件編譯了,從這里我們可以猜測到,為什么上文中outer()調用之前,inner()是無法調用的。因為innerouter()調用之前還未被“編譯”(只是猜測,未深入研究)。

 

 

函數動態調用

 

函數名可以是變量名。

function foo()

{

echo "call foo";

}

$func='foo';

$func();

此方式比較危險,建議使用白名單方式將可用的函數名寫在配置文件中,或者函數名都有統一前綴,比如$func="act_".$funcName;。另外在調用之前可用function_exists ($funcName)來檢查函數是否存在。

 

通過內置函數調用函數,call_user_func(callback function ,[, mixed parameter [, mixed ...]] ),對于不確定的函數名,確定的參數可以使用此函數調用,如果參數也不確定可以通過call_user_func_array( callback function, array param_arr )

另外,可以通過get_defined_functions()來獲取所有已定義的函數(注意是所有,包括內置函數)

 

調用類的方法則傳入一個數組作為參數,此數組第一個元素是實例或類名,第二個元素是方法名:

class myclass

{

    public $age=21;

 

    function echo_age()

    {

        echo $this->age;

    }

    static function s_echo_age()

    {

        echo 22;

    }

    function i_echo_age()

    {

        echo 23;

    }

}

$c=new myclass;

$classname = "myclass";

//調用實例方法,如果call_user_func(array($classname , 'echo_age'));則會報錯,$this未指向任何實例

call_user_func(array($c, 'echo_age'));

echo "/n";

//調用實例方法,如果沒有引用$this變量,則不會有問題

call_user_func(array($classname, 'i_echo_age'));

echo "/n";

//調用靜態方法,傳入類名或實例均可

call_user_func(array($classname, 's_echo_age'));

echo "/n";

call_user_func(array($c, 's_echo_age'));

 

 

獲取函數參數

 

通過此方式可以實現非常靈活的重載,但容易使邏輯變得負責,適度使用。

func_get_arg ( int arg_num )獲取第arg_num個參數(從0開始計數)

func_num_args()獲取參數總個數

func_get_args()獲取所有參數。

 

用三行代碼實現Gof中的一個設計模式:

function call_it($func)

{

$args=func_get_args();

array_shift($args);//去掉第一個參數,那是函數名

call_user_func_array($func,$args);

}

 

function add($a,$b)

{

    echo $a+$b;

}

function sqr($a)

{

    echo $a*$a;

}

call_it('add',1,2);

echo "/n";

call_it('sqr',2);

php技術PHP函數常用用法小結,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 免费精品国产人妻国语麻豆 | 97视频免费在线 | 久 久 亚洲 少 妇 无 码 | 97人妻AV天天澡夜夜爽 | 日韩熟女精品一区二区三区 | 成人国产精品日本在线 | 亚洲人成网77777色在线播放 | 视频一区国产第一页 | np高h肉辣一女多男 no视频在线观看 | asmr淫语 | 女人一级毛片免费观看 | 91精品福利一区二区 | 色综合久久五月 | 久久看片网 | 芭乐视频免费资源在线观看 | 色哦色哦哦色天天综合 | china年轻小帅脸直播飞机 | 国产成人教育视频在线观看 | 久久综合色一综合色88 | 91嫩草国产在线观看免费 | 99久久免费热在线精品 | 美女被打开了屁股进去的视频 | 一个人看的www视频动漫版 | 99热国产这里只有精品6 | 高h辣h双处全是肉一对一 | 成人国产在线观看 | 无码乱人伦一区二区亚洲 | 丹麦1o一19sex性hdhd| 国产在线亚洲精品观 | 丰满少妇69激情啪啪无码 | 成人国产精品玖玖热色欲 | 国产品无码一区二区三区在线 | 成人亚洲视频 | 亚洲免费观看在线视频 | 亚洲妈妈精品一区二区三区 | 国产精品一区二区激情 | 免费在线观看黄色网址 | 亚洲黄色录像片 | BL文库好大粗黑强强肉NP | 87影院午夜福利 | 中国国产不卡视频在线观看 |