亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 1629 | 回復(fù): 0
打印 上一主題 下一主題

PHP的動(dòng)態(tài)特性 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2008-10-18 22:23 |只看該作者 |倒序?yàn)g覽

                                                原創(chuàng),轉(zhuǎn)載請(qǐng)聲明出處 http://blog.chinaunix.net/u/27731/showart.php?id=1328279
作者:流水孟春 121169238(at)qq.com
1、動(dòng)態(tài)語(yǔ)言
    動(dòng)態(tài)語(yǔ)言就是能夠在運(yùn)行時(shí)改變程序結(jié)構(gòu)和變量類(lèi)型的語(yǔ)言。例如:新的類(lèi)和對(duì)象可以被加載和創(chuàng)建,新的函數(shù)或方法可以加入和去除等等。
    動(dòng)態(tài)語(yǔ)言都被設(shè)計(jì)成弱類(lèi)型,也就是說(shuō)變量被賦值以后才能確定它的數(shù)據(jù)類(lèi)型,當(dāng)代碼在實(shí)際執(zhí)行時(shí),才會(huì)檢測(cè)變量是否被非法使用。
2、PHP動(dòng)態(tài)特性:
特性1、弱類(lèi)型變量
    PHP變量是弱類(lèi)型變量就意味著,我們不需要聲明變量的類(lèi)型,在運(yùn)行時(shí)自動(dòng)檢測(cè)變量的類(lèi)型,并且可以認(rèn)為改動(dòng)變量的類(lèi)型。
?php
// PHP弱類(lèi)型變量例子
$test = 1;
print gettype($test) . ": $test\n";
$test = 1.23456789;
print gettype($test) . ": $test\n";
$test = 'test';  // 變量自動(dòng)改變類(lèi)型
print gettype($test) . ": $test\n";
$test = array('t'=>'HI,I m from an array!');
settype($test, 'object');  // 改變變量的類(lèi)型
print gettype($test) . ": {$test->t}\n";
// 測(cè)試變量類(lèi)型
if(is_object($test)) {
    print "Test Type: My Type Is object.\n";
} else {
    print gettype($test);
}
?>
弱類(lèi)型并不意味著代碼不安全,或者不健壯。極限編程已經(jīng)給成為一種軟件開(kāi)發(fā)方法。這個(gè)方法側(cè)重測(cè)試,使用全面的單元測(cè)試方案來(lái)驅(qū)動(dòng)開(kāi)發(fā)過(guò)程。通過(guò)不同環(huán)境
下執(zhí)行所編寫(xiě)的代碼,就可以保證代碼的安全性和健壯性。經(jīng)驗(yàn)證明,在弱類(lèi)型語(yǔ)言中,綜合運(yùn)用弱類(lèi)型和單元測(cè)試通常比傳統(tǒng)系統(tǒng)編程語(yǔ)言的類(lèi)型檢查更好(請(qǐng)參
考《Thinking in Java》作者Bruce Eckel的博客http://mindview.net/WebLog/log-0025)。
特性2、可變變量
一個(gè)變量的變量名可以動(dòng)態(tài)的設(shè)置和使用
?php
// 可變變量例子
$var = 'hi';
$$var = 'hello';
print $var;
print $$var;
print $hi;  // 等價(jià)于上一行
?>
特性3、變量函數(shù)
這意味著如果一個(gè)變量名后有圓括號(hào),PHP 將尋找與變量的值同名的函數(shù),并且將嘗試執(zhí)行它。除了別的事情以外,這個(gè)可以被用于實(shí)現(xiàn)回調(diào)函數(shù),函數(shù)表等等。
?php
// 變量函數(shù)例子
// 無(wú)參數(shù)函數(shù)
function a(){
    print "i'm a\n";
}
// 有參數(shù)函數(shù)
function b($param) {
    print "i'm b, param: $param\n";
}
$x = 'a';
$x();
$x = 'b';
$x('xxxxxxxxxxx');
?>
特性4、可變長(zhǎng)度參數(shù)列表
調(diào)用函數(shù)的時(shí)候,函數(shù)的參數(shù)個(gè)數(shù)可以不一樣
?php
function foo() {
   $numargs = func_num_args();
   print "Number of arguments: $numargs\n";
   print "the third argument: " . func_get_arg(2) . "\n";
}
foo(1, 2, '...@...');
foo(1, 2, '############', 4);
?>
特性5,從數(shù)組中導(dǎo)出變量
把數(shù)組中的數(shù)據(jù)復(fù)制出變量,將鍵名當(dāng)作變量名,值作為變量的值。
?php
// 例1
$a = array('x' => 100, 'y'=> 200, 'z' => 300);
// 從數(shù)組中將變量導(dǎo)入到當(dāng)前的符號(hào)表
extract($a); // 和extract相反的函數(shù)是compact()
print "$x $y $z";
?>
?php
// 例2
$a = array(100, 200, 300);
list($x, , $z) = $a;
print "$x $z";
?>
特性6,用一個(gè)數(shù)組的值作為其鍵名,另一個(gè)數(shù)組的值作為其值,創(chuàng)建一個(gè)數(shù)組
?php
$a = array('green', 'red', 'yellow');
$b = array('avocado', 'apple', 'banana');
$c = array_combine($a, $b);
print_r($c);
?>
特性7,動(dòng)態(tài)創(chuàng)建函數(shù)
?php
// lambda函數(shù)
$newfunc = create_function('$a,$b', 'return "$a + $b = " . $a + $b;');  // 創(chuàng)建了一個(gè)匿名函數(shù)
print "\nNew anonymous function: $newfunc\n";
print $newfunc(2, 4);
print "\n";
// 效果類(lèi)似于
function test($a,$b){
    return "$a + $b = " . $a + $b;
}
print test(2, 4);
?>
特性8、自動(dòng)加載對(duì)象
可以定義一個(gè) __autoload 函數(shù),它會(huì)在試圖使用尚未被定義的類(lèi)時(shí)自動(dòng)調(diào)用。
?php
// ClassA.php, 這段代碼寫(xiě)在ClassA.php
class A {
    function __construct() {
        print 'yeah!';
    }
}
?>
?php
function __autoload($className) {
   require_once $className . '.php';
}
// 這段代碼寫(xiě)在b.php
new A();  // 程序運(yùn)行到這里的時(shí)候,A類(lèi)未定義,將自動(dòng)調(diào)用__autoload()函數(shù)
?>
特性9、__get和__set代替所有對(duì)屬性變量數(shù)組的訪問(wèn)
?php
class Setter{
   public $n;
   private $x = array("a" => 1, "b" => 2, "c" => 3);
   private function __get($nm) {
       echo "Getting [$nm]\n";
       if (isset($this->x[$nm])) {
           $r = $this->x[$nm];
           print "Returning: $r\n";
           return $r;
       } else {
           echo "Nothing!\n";
       }
   }
   private function __set($nm, $val) {
       echo "Setting [$nm] to $val\n";
       if (isset($this->x[$nm])) {
           $this->x[$nm] = $val;
           echo "OK!\n";
       } else {
           echo "Not OK!\n";
       }
   }
   private function __isset($nm) {
       echo "Checking if $nm is set\n";
       return isset($this->x[$nm]);
   }
   private function __unset($nm) {
       echo "Unsetting $nm\n";
       unset($this->x[$nm]);
   }
}
$foo = new Setter();
$foo->n = 1;
$foo->a = 100;
$foo->a++;
$foo->z++;
var_dump(isset($foo->a)); //true
unset($foo->a);
var_dump(isset($foo->a)); //false
// this doesn't pass through the __isset() method
// because 'n' is a public property
var_dump(isset($foo->n));
var_dump($foo);
?>
特性10、自定義未定義的方法
你調(diào)用未定義方法時(shí),方法名和方法接收的參數(shù)將會(huì)傳給__call方法
?php
class Caller {
   private $x = array(1, 2, 3);
   private function __call($m, $a) {
       print "Method $m called:\n";
       print_r($a);
       return $this->x;
   }
}
$foo = new Caller();
$a = $foo->test(1, "2", 3.4, true);
print_r($a);
?>
特性11、自定義錯(cuò)誤、異常處理
設(shè)置使用自定義錯(cuò)誤或異常處理函數(shù)后,當(dāng)發(fā)生錯(cuò)誤或異常時(shí)將調(diào)用自定義的處理函數(shù)代替系統(tǒng)錯(cuò)誤處理函數(shù)。
?php
set_error_handler('error_handler');  // 設(shè)置錯(cuò)誤時(shí)調(diào)用的自定義處理錯(cuò)誤函數(shù),設(shè)置自定義異常處理函數(shù)為set_exception_handler()
print $a/0;  // 這里邏輯錯(cuò)了,調(diào)用error_handler()報(bào)錯(cuò)
function error_handler($errno, $message, $filename, $line) {
  if ($errno & (E_ALL ^ E_NOTICE)) {
    $types = array(
        1 =>     'error',
        2 =>     'warning',
        4 =>     'parse error',
        8 =>     'notice',
        16 =>    'core error',
        32 =>    'core warning',
        64 =>    'compile error',
        128 =>   'compile warning',
        256 =>   'user error',
        512 =>   'user warning',
        1024 =>  'user notice',
        2048 =>  'strict warning'
    );
    print "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
    print $types[$errno] .': '. $message .' in '. $filename .' on line '. $line .'.';
    print "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
    exit;   
  }
}
?>
特性12、高可配置性
可修改范圍為
PHP_INI_USER 的 配置選項(xiàng)可在用戶(hù)的PHP腳本或Windows注冊(cè)表中設(shè)置
PHP_INI_PERDIR 的 配置選項(xiàng)可在 php.ini, .htaccess 或 httpd.conf 中設(shè)置
PHP_INI_SYSTEM 的 配置選項(xiàng)可在 php.ini or httpd.conf 中設(shè)置
PHP_INI_ALL 的 配置選項(xiàng)可在各處設(shè)置
我們要熟悉在php.ini中修改php的配置,還會(huì)經(jīng)常在php腳本中修改腳本中可修改的配置項(xiàng)。
可以使用 ini_set()函數(shù)或?qū)iT(mén)修改運(yùn)行時(shí)配置的函數(shù)來(lái)改變可修改范圍為PHP_INI_ALL
?php
// 修改php的配置參數(shù)
ini_set('session.save_path', 'D:/temp');  // 修改配置讓腳本把session文件保存到D:/temp目錄
?>
特性13、代碼中執(zhí)行php腳本
特性14、php的工作模型
(這個(gè)特性詳細(xì)的在http://blog.csdn.net/phphot/archive/2008/02/19/2105600.aspx)
    作為一種純解釋型語(yǔ)言,PHP腳本在每次被解釋時(shí)進(jìn)行初始化,在解釋完畢后終止運(yùn)行。這種運(yùn)行是互相獨(dú)立的,每一次請(qǐng)求都會(huì)創(chuàng)建一個(gè)單獨(dú)的進(jìn)程或線程,來(lái)解釋相應(yīng)的頁(yè)面文件。頁(yè)面創(chuàng)建的變量和其他對(duì)象,都只在當(dāng)前的頁(yè)面內(nèi)部可見(jiàn),無(wú)法跨越頁(yè)面訪問(wèn)舊電腦回收。
    在終止運(yùn)行后,頁(yè)面中申請(qǐng)的、沒(méi)有被代碼顯式釋放的外部資源,包括內(nèi)存、數(shù)據(jù)庫(kù)連接、文件句柄、Socket連接等,都會(huì)被強(qiáng)行釋放。
  也就是說(shuō),PHP無(wú)法在語(yǔ)言級(jí)別直接訪問(wèn)跨越頁(yè)面的變量,也無(wú)法創(chuàng)建駐留內(nèi)存的對(duì)象。
   PHP這種獨(dú)特的工作模型的優(yōu)勢(shì)在于,基本上解決了令人頭疼的資源泄漏問(wèn)題。Web應(yīng)用的特點(diǎn)是大量的、短時(shí)間的并發(fā)處理,對(duì)各種資源的申請(qǐng)和釋放工作非常頻繁,很容易導(dǎo)致泄漏。
    但是,這種機(jī)制的缺點(diǎn)也非常明顯。最直接的后果是,PHP在語(yǔ)言級(jí)別無(wú)法實(shí)現(xiàn)跨頁(yè)面的緩沖機(jī)制。
               
               
               
               
               
               

本文來(lái)自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u/27731/showart_1328279.html
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專(zhuān)區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP