LinuxÒÁµéÔ°ÂÛ̳'s Archiver

otto ·¢±íÓÚ 2005-3-14 22:43

ÎªÃæÏò¶ÔÏó¶øÉúµÄPHP5

[ÕªÒª]Ŀǰ¿ª·¢ÖеÄPHP5£¬ÆäÃæÏò¶ÔÏóµÄ»úÄÜÒѾ­±»´ó·ù¶ÈµÄÇ¿»¯ÁË¡£ÏÂÒ»´úµÄPHP½«»áÊÇÔõÑùµÄÒ»ÖÖÓïÑÔÄØ£¿ÏÂÃæÎÒÃÇÀ´Ïêϸ½²½âÒ»ÏÂĿǰ·¢²¼µÄPHP5µÄbeta release¡£




(Ò»)¡¡Zend 2.0µÄµ®Éú
ÏÖÔÚµÄPHP4ËùʹÓõĻù±¾ÎÄ·¨ÊDZ»³ÆÖ®ÎªZend ÒýÇæµÄ½Å±¾±àÒëÒýÇæ¡£Õâ¸ö¾ÍÊÇPHP4µÄÓÅÁ¼»úÄܵÄÔ­ÒòÖ®Ò»£¬ÊÇ×÷Ϊ¶ÔPHP3µÄ¸Ä½ø¶øÉú³ÉµÄÒ»ÖÖÓïÑÔ¡£´ó¼ÒÒ»Ö±ÈÏΪ£¬PHP4µÄÐÔÄܸù¾Ýµ±³õµÄÄ¿±ê£¬±ÈPHP3ÓÐÁ˺ܴóµÄÌáÉý£¬ÔÚÍøÂç±à³ÌµÄÊÀ½çÀïÕ¼¾ÝÁ˺ܴóµÄ·Ý¶î¡£

¿ª·¢ÁËZend ÒýÇæµÄZend¹«Ë¾ÊÇÔÚ¿ª·¢PHP4µÄͬʱ£¬ÓÉPHP3µÄÖ÷Òª¿ª·¢ÕßZeev SuraskiºÍAndi GutmansËù´´Á¢µÄÆóÒµºÏ²¢¶øÀ´µÄ¡£ZendµÄÃû³ÆÊÇÓÉZeevºÍAndiµÄÃû×ÖºÏÆðÀ´×é³ÉµÄ¡£Zend¹«Ë¾µÄÉÌҵģʽÊÇ£¬³ÖÐø²»¶ÏµÄΪopen sourceÌṩzend ÒýÇæµÄPHPÄÚºË (core)£¬Í¬Ê±ÌáÉýÖܱ߲úÆ·¿ª·¢ºÍ··ÂôµÄÀûÒæ¡£ÒÔopen source software×÷Ϊ»ùÅ̵ÄÉÌÒµ£¬ÔÚÊÀ½ç·¶Î§ÄÚ´ó¶àÊýÕýÔÚ¿àÕ½µÄÆóÒµÖУ¬ËãÊDZȽϺõĵäÐÍÀý×ÓÁË¡£

¡öPHP4µÄ¾ÖÏÞ

ÍÐPHP4³É¹¦µÄ¸££¬Õâ¸öÓÃ;µÄÊÊÓ÷¶Î§Öð½¥±ä¹ãÆðÀ´¡£×÷ΪÆóÒµ¼¶µÄÓÃ;¶øÊ¹ÓÃPHPµÄ˵·¨Ê±ÓÐËùÎÅ¡£Òò´Ë£¬¾ÍÓÐÁËÕâÑùÒ»¸öÎÊÌ⣬¹¹Öþ´ó¹æÄ£ÍøÕ¾µÄʱºò£¬´úÂëµÄÔÙÀûÓÃÐÔÊ®·Ö²î¡£¾ßÌåÀ´Ëµ¾ÍÊÇ£¬PHP4µÄÃæÏò¶ÔÏóÐÔÄܺÜÈõ£¬Òò´Ëϰ¹ßÓÚʹÓÃJavaµÈµÄ¼¼ÊõÈËÔ±¶Ô´ËÓкܶàµÄ±§Ô¹¡£

Ö𲽵ĸÄÉÆPHP4µÄÃæÏò¶ÔÏóµÄÐÔÄÜ£¬´ó·ù¶ÈµÄ¸ü¸Ä»ù±¾ÎÄ·¨£¬¿ª·¢Õß´ï³ÉÁ˸üÐÂPHP¼ÇÊö·½·¨µÄ¿ªÍØÄ¿µÄ¡£

¡öZend 2.0¿ªÊ¼¿ª·¢
Ëæºó£¬Zend¹«Ë¾PHPÖÐÐĵĿª·¢ÕßÃÇÔÚ2001Äê7Ô·¢±íÁË×÷ΪÏÂÒ»´úPHPÓïÑÔÒýÇæµÄZend 2.0ÒýÇæµÄ¹¹Ïë¡£ÒÔ[Zend Engine version 2.0: Feature Overview and Design]
£¨http://www.zend.com/engine2/ZendEng...ó·?ȵÄÇ¿»?Ë¡?/a>
ĿǰµÄPHP4 Zend ÒýÇæµÄÀ©ÕÅÇé¿öÓëÎôÈÕµÄPHP3Èç³öÒ»ÕÞ¡£Õâ¾ÍÒâζ×Å£¬ÒªÌáÉýеÄÓïÑÔÒýÇæµÄÖ÷°æ±¾ºÅ£¬Ã÷È··½·¨Ä¿±ê£¬Ó­½ÓÀ´×Ô¿ª·¢ÍÅÌåµÄ³ÆÔÞ¡£

Ze2µÄ¿ª·¢£¬ÓëÒÔÍùµÄZendÒýÇæÒ»Ñù£¬¶¼ÊÇÔËÐÐÔÚopen sourceµÄģʽϵġ£×îеÄÔ´´úÂëÔÚCVSÉϱ»È«ÃæµÄ¹«¿ª£¬ÒòΪÊÇÃæÏò¿ª·ÅµÄ¿ª·¢Õߵ쬹ØÓÚ¿ª·¢µÄÒéÂ۷dz£µÄ»îÔ¾¡£

ÏÖÔÚZe2±»¾ö¶¨²ÉÓÃÓÚPHPµÄÏÂÒ»¸ö°æ±¾PHP5ÖС£×îÖÕ·¢²¼µÄʱ¼äÏÖÔÚ»¹Î´¶¨£¬µ«ÊǼÙÈç¸ù¾ÝZend¹«Ë¾2003Äê4ÔÂ1ÈÕ·¢²¼µÄNewsletterµÄ»°£¬ÏÖÔÚµÄÓ¦¸Ã¾ÍÊÇBeta ReleaseÁË¡£


(¶þ)¡¡PHP5µÄÐÂÌØÐÔ

½ÓÏÂÀ´Çë°´ÕÕ˳Ðò¿´Ò»Ï±»Ç¿»¯µÄPHP5µÄÐÔÄÜ¡£Ê×ÏÈÊÇ×îÎªÖØÒªµÄÃæÏò¶ÔÏóÐÔÄÜ£¬ÀàµÄʵÌåÌØÐÔÔÚ´ó·ù¶ÈµÄ±»ÐÞ¸Ä×Å¡£ÕâÀï˵µÄ½öÊǹØÓÚÀàµÄÐÂÌØÐÔ¡£

? ¶ÔÏóµÄ²ÎÕÕ¹ý¶ÉÊÇĬÈϵģ¨default£©
? ÒýÈë·ÃÎÊÊôÐÔµÄÏÞÖÆ
? ÒýÈë·ÃÎÊ·½·¨µÄÏÞÖÆ
? ³éÏóÀàºÍ³éÏó·½·¨
? ½Ó¿Ú
? finalÉùÃ÷
? Ãû¿Õ¼ä
? ÀàÄÚ³£Á¿
? Àà±äÁ¿
? ͳһ¹¹½¨Æ÷
? Îö¹¹º¯Êý£¨Distructor£©
? ÆäËû¸½ÊôÌØÐÔ

ÒÔÉÏÄÚÈÝÊǸù¾Ý2003Äê4ÔÂ22ÈÕCVSÉϵǼ°æ±¾×ÊÁÏËùдµÄ£¬ÔÚÕýʽµÄ·¢²¼Ö®Ç°£¬Ò²Óб䶯µÄ¿ÉÄÜÐÔ¡£

¡ö¶ÔÏóµÄĬÈϲÎÕÕ¹ý¶É

ÔÚPHP4ÖУ¬ÔÚÒÔ±äÁ¿$var1ΪÀàµÄʵÌå¶ÔÏóµÄʱºò£¬Èç¹û$var2 = $var1;ÄÇô£¬ÔÚ$var2ÖУ¬$var1µÄ¸´ÖƱ»´úÈë¡£Ã÷ÏԵģ¬$var2ΪÁËÖ¸ÏòÓë$var1ÏàͬµÄ¶ÔÏ󣬾ÍҪд³É$var2 =& $var1£¬±ØÐëÒª¼ÓÉÏ&×÷Ϊ²ÎÕÕ¡£
¶øÔÚPHP5£¬¶ÔÏóµÄ´úÈ뽫³ÉΪ×Ô¶¯µÄ²ÎÕÕ¹ý¶É¡£Ò²¾ÍÊÇ˵£¬
$var2=$var1,Á½ÕßÖ¸ÏòÏàͬµÄ¶ÔÏó¡£Èç¹ûÏëҪͬphp4Ò»Ñù£¬´øÈëcopy,ÄÇô¾Í»áÔËÓõ½µ¼Èë__clone()µÄ·½·¨¡£
$var2 = $var1->__clone();´Ë´¦£¬cloneÇ°ÃæÊÇÁ½¸öÁ¬ÐøµÄ¡°_¡±
£¨Õâ½ö½öÊÇÀàµÄʵÌåµÄÌØÐÔ£©


¡öÒýÈë·ÃÎÊÊôÐÔµÄÏÞÖÆ

ÔÚPHP4µÄÀàÖУ¬Á¬Í¬ÊôÐԺͷ½·¨ÔÚÄÚ£¬¿ÉÒÔ×ÔÓɵķÃÎÊÀàµÄÄÚÍâÈκεط½£¬¶øÃ»ÓÐÏÞÖÆ¡£Òò´Ë£¬Óû§¾ÍÎÞ·¨·À·¶ÊôÐÔµÄÎÞÒâÖеĸü¸Ä¡£

¶øÔÚPHP5ÖУ¬Í¬C++ºÍJavaÒ»Ñù£¬µ¼ÈëÁËprivate, protected, publicÈý¸öµÈ¼¶µÄ·ÃÎÊÏÞÖÆ£¬Ê¹µÃÀàµÄÉè¼ÆÕßÄܹ»¶ÔÊôÐԺͷ½·¨µÄʹÓ÷½·¨½øÐÐÏÞ¶¨¡£ÒÔÏÂÊǸ÷ÖÖ·ÃÎÊÏÞÖÆµÄÒâ˼¡£

? Public: ¿ÉÒÔ×ÔÓɵÄÔÚÀàµÄÄÚÍâÈκεط½½øÐвÎÕÕ¡¢±ä¸ü
? Private: Ö»ÄÜÔÚÕâ¸öÀàµÄ·½·¨ÖнøÐвÎÕÕ¡¢±ä¸ü
? Protected£ºÄܹ»ÔÚÕâ¸öÀàÒÔ¼°¼Ì³ÐÁËÕâ¸öÀàµÄÁíÒ»¸öÀàµÄ·½·¨ÖнøÐвÎÕÕ¡¢±ä¸ü¡£ÁíÍ⣬Ôڼ̳еÄÀàÖУ¬Äܹ»Ð´Èë·ÃÎÊÖ¸¶¨¡£

ÔÚPHP4Öеġ°var¡±£¬Í¬ÒÔÍùÒ»ÑùÓëpublicÓÐ×ÅÏàͬµÄÒâ˼¡£ÏÂÃæ¾ÍÀ´¾ÙÒ»¸öÀý×Ó£¬ÈÃÎÒÃÇÀ´¿´¿´·ÃÎÊÏÞÖÆÊÇÔõÑùÆð×÷Óõġ£

PHP´úÂë:--------------------------------------------------------------------------------
class Hoge1 {
¡¡private $var1 = 'A';
¡¡protected $var2 = 'B';
¡¡protected $var3 = 'C';

¡¡function setLower() {
¡¡¡¡$this->var1 = 'a';
¡¡¡¡$this->var2 = 'b';
¡¡¡¡$this->var3 = 'c';
¡¡}
¡¡function var1() {
¡¡¡¡return $this->var1;
¡¡}
¡¡function var2() {
¡¡¡¡return $this->var2;
¡¡}
¡¡function var3() {
¡¡¡¡return $this->var3;
¡¡}
}

--------------------------------------------------------------------------------

ÔÚÕâ¸öÀàÖУ¬´øÓÐ$var1, $var2, $var3Èý¸öÊôÐÔ¡£$var1±»ÉùÃ÷Ϊprivate, $var2ºÍ$var3ÊÇprotected.ÔÚ´Ë´¦

PHP´úÂë:--------------------------------------------------------------------------------
$hoge=new Hoge1;
echo¡¯var1:¡¯.$hoge->var1.¡±
n¡±

--------------------------------------------------------------------------------

Èç¹û³¢ÊÔ²ÎÕÕ²»ÔÊÐí´ÓÍⲿ½øÐзÃÎʵÄprivateÊôÐÔ£¬ÄÇô¾Í»á³öÏÖÈçÏ´íÎó£º

Fatal error: Cannot access private property hoge1::$var1 in /path/to/script.php on line XX

¶ÔÓÚprotectedµÄ$var2Ò²ÊÇÏàͬµÄ¡£

µ«ÊÇ£¬ÒòΪ$hogeµÄ·½·¨ÊÇûÓÐprivateºÍprotectedµÄ£¬ËùÒÔÏÂÃæµÄ´úÂëÄܹ»Õý³£ÔË×÷£¬·µ»ØÄÚ²¿Ë½Óкͱ£»¤±äÁ¿µÄÖµ¡£

PHP´úÂë:--------------------------------------------------------------------------------
echo 'var1: ' . $hoge->var1() . "
\n";¡¡// var1: A
echo 'var2: ' . $hoge->var2() . "
\n";¡¡// var2: B
echo 'var3: ' . $hoge->var3() . "
\n";¡¡// var3: C

$hoge->setLower();

echo 'var1: ' . $hoge->var1() . "
\n";¡¡// var1: a
echo 'var2: ' . $hoge->var2() . "
\n";¡¡// var2: b
echo 'var3: ' . $hoge->var3() . "
\n";¡¡// var3: c

--------------------------------------------------------------------------------

Æä´Î£¬ÎªÁËÄܹ»¿´µ½protectedµÄÊôÐÔµÄ״̬£¬ÎÒÃÇÊÔ×Å´´ÔìÁ˼̳ÐÁËHoge1µÄÀàHoge2

PHP´úÂë:--------------------------------------------------------------------------------
class Hoge2 extends Hoge1 {
¡¡public $var3 = '3';

¡¡function d_var1() {
¡¡¡¡return $this->var1;
¡¡}
¡¡function d_var2() {
¡¡¡¡return $this->var2;
¡¡}
¡¡function d_var3() {
¡¡¡¡return $this->var3;
¡¡}
}

--------------------------------------------------------------------------------

ÔÚÀàHoge2ÖУ¬Ö»ÓÐ$var3±»ÉùÃ÷Ϊpublic¡£ÔÚÊôÐÔÊÇprotectedµÄÇé¿öÏ£¬´Ó×ÓÀà½øÐзÃÎÊÓкÎÖÖÏÞÖÆ£¬ÊÇÓÉ×ÓÀàµÄÊôÐÔÉùÃ÷¾ö¶¨µÄ¡£ÔÚHoge2ÖУ¬ÒòΪ$var3±»ÉùÃ÷ÊÇpublic£¬Òò´ËÎÞÂÛÊǴӺ䦶¼¿ÉÒÔ·ÃÎÊHoge2µÄ$var3£¨ÊµÌåÊÇHoge1µÄ$var3£©¡£ÒòΪ$var1ÔÚHoge1ÖÐÊÇprivate£¬Òò´Ë£¬ÔÚHoge2×ÓÀàÖÐHoge1µÄ$var1²»»á±»¼Ì³Ð£¬¶øÔÚHoge2ÖÐÓпÉÄÜ»á×ö³öÃûΪ$var1µÄÊôÐÔ£¬Òò´Ë£¬±ØÐëÒªÃ÷È·Çø·ÖHoge1::$var1ºÍHoge2::$var1¡£

PHP´úÂë:--------------------------------------------------------------------------------
$hoge = new Hoge2;

echo 'var1: ' . $hoge->var1 . "
\n";¡¡¡¡¡¡// var1:
// echo 'var2: ' . $hoge->var2 . "
\n";¡¡ // Error
echo 'var3: ' . $hoge->var3 . "
\n";¡¡¡¡¡¡// var3: 3

echo 'var1: ' . $hoge->d_var1() . "
\n";¡¡// var1:
echo 'var2: ' . $hoge->d_var2() . "
\n";¡¡// var2: B
echo 'var3: ' . $hoge->d_var3() . "
\n";¡¡// var3: 3

--------------------------------------------------------------------------------


$hoge->var1ÊÇÓëHoge1::var1ûÓйØÏµµÄ±äÁ¿£¬Òò´Ë²»»áÓÐÈκÎÏÔʾ£¬ÒòΪvar2ÓÐprotected·ÃÎÊÏÞÖÆ£¬ËùÒÔÈç¹û²»Í¨¹ýmethod¾ÍÖ±½Ó²ÎÕÕ$var2£¬¾Í»á³öÏÖÖÂÃü´íÎó¡£

¡öÒýÈë·ÃÎÊ·½·¨µÄÏÞÖÆ

ÓëÉÏÊöÏàͬ£¬´Ë´¦Ò²·ÖΪprivate, protected, publicÈýÖÖ¡£

? Public: Äܹ»´ÓÈκεط½µ÷ÓÃ
? Private: Ö»Äܹ»´ÓÕâ¸öÀàµÄmethodÄÚµ÷ÓÃ
? Protected: Ö»Äܹ»´ÓÕâ¸öÀàÒÔ¼°subclassµÄmethodÖе÷ÓÃ

´Ë´¦µÄÒâ˼ͬJavaºÍC++Ïàͬ£¬Çë²»Òª¸ã»ì¡£

¡ö³éÏó(abstract)µÄÀàºÍ³éÏóµÄ·½·¨

Ö§³ÖÓëJavaÏàͬµÄ³éÏóÀàºÍ³éÏó·½·¨¡£³éÏó·½·¨Ö»ÌṩÁË·½·¨ÃûµÄµ÷Ó÷½Ê½£¬¶øÃ»ÓÐÌṩʵÌå¡£ÁíÍ⣬³ÖÓгéÏó·½·¨µÄÀ࣬±ØÐë³éÏóÐûÑÔÀà±¾Éí¡£Èç¹ûÏëÒªÖ±½Ó×÷³É³éÏóÀàµÄ¶ÔÏó£¬ÄÇô¾Í»á³öÏÖÈçϵÄÖÂÃü´íÎó¡£

Fatal error: Cannot instantiate abstract class ClassName

²úÉú´íÎóµÄʵ¼ÊµÄÀý×ÓÈçÏÂËùʾ£º

PHP´úÂë:--------------------------------------------------------------------------------



abstract class MyAbstract {
¡¡abstract public function test();
¡¡public function test2() {
¡¡¡¡echo "MyAbstract::test2() called.
\n";
¡¡}
}

class MyImplement extends MyAbstract {
¡¡public function test() {
¡¡¡¡echo "MyImplement::test() called.
\n";
¡¡}
}

$obj = new MyImplement;
$obj->test();

?>

--------------------------------------------------------------------------------


¡ö½Ó¿Ú(interface)

Ö§³ÖÓëJavaÏàͬµÄ½Ó¿Ú£¨interface£©¡£½Ó¿ÚÊÇÊʺÏËùÃèÊöµÄÍⲿµ÷ÓÃÐÎʽ¶øÉè¼Æ×éºÏÆðÀ´µÄ¡£
½Ó¿ÚµÄʵÌå²»Äܹ»¼Ç¼¡£Ïà·´µÄ£¬ÊµÏÖ½Ó¿ÚµÄÀà±ØÐë³ÖÓÐÓëÕâ¸ö½Ó¿ÚµÄ·½·¨Ïà¶ÔÓ¦µÄʵÌå¡£ÁíÍ⣬ÀàÄܹ»ÊµÏÖ¶à¸ö½Ó¿Ú£¬Òò´Ë£¬ÓпÉÄÜʵÏÖ¶àÖØ¼Ì³Ð¡£

PHP´úÂë:--------------------------------------------------------------------------------


interface Throwable {
¡¡public function getMessage();
}

interface Serializable {
¡¡public function toString();
}

class MyException implements Throwable, Serializable {
¡¡public function getMessage() {
¡¡¡¡return 'this is MyException message';
¡¡}

¡¡public function toString() {
¡¡¡¡return 'MyException: this is MyException message';
¡¡}
}

$e = new MyException;
echo $e->getMessage();
echo $e->toString();
?>

--------------------------------------------------------------------------------


¡öfinalÉùÃ÷

ͬJavaÒ»Ñù£¬PHP5Ö§³ÖfinalÉùÃ÷¡£Èç¹û¶ÔÓÚÒ»¸ö·½·¨×·¼ÓfinalÉùÃ÷£¬Õâ¸ö·½·¨½«¿Ï¶¨ÔÚ×ÓÀ಻ÄÜÖØÔØ(Override)¡£Èç¹û·½·¨±»finalÉùÃ÷ÁË£¬µ«ÊÇ»¹ÔÚ×ÓÀàÖÐÖØÔØ£¬¾Í»á³öÏÖÈçÏ´íÎó£º

PHP´úÂë:--------------------------------------------------------------------------------
Fatal error: Cannot override final method fuga::foo()

--------------------------------------------------------------------------------


²úÉú´íÎóµÄÀý×Ó£º

PHP´úÂë:--------------------------------------------------------------------------------

class Fuga {
¡¡final function foo() {
¡¡¡¡echo "this is final function\n";
¡¡}
}

class Hoge extends Fuga {
¡¡function foo() {
¡¡¡¡echo "this is not final function\n";
¡¡}
}
?>

--------------------------------------------------------------------------------


(Èý)¡¡PHP5µÄÐÂÌØÐÔ(Ðø)

PHP5µÄ·¢²¼¼Æ»®

ÔÚÇ°ÃæµÄÎÄÕÂÖÐÎÒÃÇÌáµ½£¬¡°¸ù¾ÝZEND¹«Ë¾2003Äê4ÔÂ1ÈÕ·¢²¼µÄѶϢµÄ»°£¬ÏÖÔÚµÄÓ¦¸Ã¾ÍÊÇBeta ReleaseÁË¡±£¬µ«ÊÇ¿ª·¢ÕßÄÚ²¿ÌÖÂ۵Ľá¹ûÊÇ£¬BetaΪʱÉÐÔ磬¶øÇÒÓпÉÄܲ»ÊÇBeta¡¡Release.

¶ÔÕâ·½Ãæ¶¯ÏòÓÐÐËȤµÄ¿ÉÒÔ²ÎÕÕ [url]news://news.php.net/[/url] ÉÏËù¹«²¼µÄÐÅÏ¢ php.version5.dev:372

ÔÚÕâ¸öÎļþÖУ¬PHP5µÄ·¢²¼¼Æ»®ÓÖÖØÐ»ص½ÁËÒ»ÕŰ×Ö½£¬¶øÁíÒ»·½Ã棬Zend Engine2µÄ¿ª·¢ÕýÔÚ×ÅÊÖ½øÐÐÖС£PHP5µÄReleaseÆäʵ´óÌå¾ÍÊÇÅÎÍû×Å¡°¿ìµãµ½ÄêÖÕ°É¡±¡£

PHP5µÄÐÂÌØÐÔ

½Ó×ÅÎÒÃÇÀ´¿´Ò»ÏÂÔÚÇ°ÃæËù½²µ½µÄÆäËûһЩ¹ØÓÚÀàµÄÐÂÔöµÄ»úÄÜ

¡öÃû¿Õ¼ä

PHP5Ö§³ÖÃû¿Õ¼ä¡£Òò´Ë£¬ÎÒÃÇ¿ÉÒÔÔÚÃû¿Õ¼äÄÚ×°ÈëÀà¡¢±äÁ¿¡¢³£Á¿¡¢º¯Êý¡£

ÔÚPHP4µÄScopeÖУ¬Ö»ÓÐglobal¡¢º¯ÊýÄÚ¡¢ÀàÄÚÕâÈý¸öÖÖÀ࣬ËùÒÔÒªÌØ±ð×¢ÒâÈç¹û²»×¢ÒâµÄ»°£¬½«»áºÜÈÝÒס°ÎÛȾ¡±global¿Õ¼ä¡£¼ÙÈçʹÓÃÃû¿Õ¼äµÄ»°ÎÒÃǾÍÄܹ»ÔÚpackageÀï·ÖÀë±äÁ¿ÃüÃû¿Õ¼ä£¬Òò´ËÓ¦¸Ã¾ÍÄܱȽÏÈÝÒ×µÄ×ö³É¶ÀÁ¢µÄpackage¡£

ʹÓÃʵÀýÈçÏ£º

PHP´úÂë:--------------------------------------------------------------------------------
namespace This {
¡¡class Hoge {
¡¡}
¡¡const aConstant = 'This Constant';
¡¡function aFunction() {}
¡¡var $aVariable = 'This Variable';
}

$obj = new This::Hoge;
echo This::aConstant . "
\n";
This::aFunction();
echo This::$aVariable . "
\n";

--------------------------------------------------------------------------------


¼ÙÉèÒª·ÃÎÊÃû¿Õ¼äÄڵĶÔÏóµÄ»°£¬¾ÍÓ¦¸ÃÕâÑù×ö£º

Ãû¿Õ¼äÃû::¶ÔÏóÃû

µ«ÊÇPHP5µÄÃû¿Õ¼ä²»»áÌ×ÈëÓëC++ÏàÒìµÄÑù×Ó¡£

¡öClassÄÚ³£Á¿

ʹÓùؼü×Öconst£¬Äܹ»ÔÚÀà¡¢Ãû¿Õ¼äÄÚ¶¨Òå³£Á¿¡£ÕâÀïÒòΪÊdz£Á¿£¬Òò´ËÒ»¶¨ÒªÔÚ³£Á¿ÃûµÄÇ°Ãæ¼ÓÉÏ$¡£ClassÄڵij£Á¿£¬±ÈÕâ¸öÀàÖеÄglobal³£Á¿µÄÓÅÏȼ¶Òª¸ß¡£

ÔÚÕâÀïconstÊÇÔ¤Ô¼ÓÒò´ËÔÚclassÃûºÍº¯ÊýÃûÖÐʹÓÃconstµÄʱºòÒª×ö±ØÒªµÄÐÞÕý¡£

PHP´úÂë:--------------------------------------------------------------------------------


define('constant_value', 'global constant');

class MyClass {
¡¡const constant_value = 'class constant';

¡¡function printConstant() {
¡¡¡¡print constant_value;
¡¡}
}

echo MyClass::constant_value . "
\n";
MyClass:rintConstant();
?>

--------------------------------------------------------------------------------


ÔÚÕâ¸öÀý×ÓÀMyClass:rintConstant()ÊÇÏÔʾ³£Á¿constant_valueµÄÖµ£¬µ«ÊÇ£¬constant_value´æÔÚÓÚglobal¿Õ¼äºÍClassÄÚÕâÁ½¸öµØ·½¡£ÔÚÕâÖÖÇé¿öÏ£¬MyClassÄڵij£Á¿constant_valueµÄÓÅÏȼ¶½Ï¸ß£¬±»ÏÔʾΪ¡¸class constant¡¹¡£

¡ö¶ÔÏó±äÁ¿

¼´Ê¹ÊÇÔÚÀàûÓб»ÊµÀý»¯×´Ì¬Ï£¬¶ÔÏó±äÁ¿Ò²ÄÜ׼ȷµÄ°´ÕÕÖ¸¶¨µÄÖµ±»³õʼ»¯¡£·ÃÎʵķ½·¨ÈçÏ£º

ÀàÃû::$±äÁ¿Ãû

PHP´úÂë:--------------------------------------------------------------------------------


class Hoge {
¡¡static $my_static = 5;
}

print Hoge::$my_static;
?>

--------------------------------------------------------------------------------


¡öͳһ¹¹½¨Æ÷

ÔÚÉú³É¶ÔÏóµÄʱºò£¬Äܹ»×Ô¶¯±»µ÷Óõķ½·¨±»³Æ×÷¡°¹¹½¨Æ÷¡±¡£

PHP4ÖеĹ¹½¨Æ÷£¬ÊÇÓëClassÃûÏàͬµÄ·½·¨Ãû¡£ÕâÊÇÓëJavaºÍC++ÏàͬµÄµØ·½£¬Òò´Ë£¬¶ÔÓÚһЩÓùßÁ˵ÄÈËÀ´Ëµ£¬²»»áÓбðŤ¸Ð¡£µ«ÊÇ£¬Èç¹ûÒª´Ó×ÓÀàÖе÷Óø¸ÀàµÄ¹¹½¨Æ÷µÄ»°£¬ÔÚPHPÖоͱØÐëÌØÒâдÉϸ¸ÀàµÄÃû×Ö¡£

ÔÚPHPÖУ¬¸¸ÀàµÄ¹¹½¨Æ÷²»Äܱ»×Ô¶¯µ÷Óã¬Òò´Ë£¬Çé¿ö¾Í±È½Ï¶à¡£
ÔÚPHP5ÖУ¬Í³Ò»²ÉÓÃÁË__constructorÕâ¸ö¹¹½¨Æ÷Ãû³Æ£¬²»¹ÜclassÃûÊÇʲô£¬·²ÊDZ»³ÆÎª__construct()µÄ£¬¶¼±»µ±×÷¹¹½¨Æ÷À´´¦Àí¡£

ÁíÍ⣬¿¼Âǵ½Í¬PHP4µÄ»¥»»ÐÔ£¬¼ÙÈç´æÔÚÓÚClassÃûÏàͬµÄÒÔǰµÄ¹¹½¨Æ÷Ãû£¬ÄÇô£¬ÓÅÏÈʹÓÃÄǸö¹¹½¨Æ÷¡£

PHP´úÂë:--------------------------------------------------------------------------------


class BaseClass {
¡¡function __construct() {
¡¡¡¡print "In BaseClass constructor\n";
¡¡}
}

class SubClass extends BaseClass {
¡¡function __construct() {
¡¡¡¡parent::__construct();
¡¡¡¡print "In SubClass constructor\n";
¡¡}
}

$obj = new BaseClass();
$obj = new SubClass();
?>

--------------------------------------------------------------------------------


¡öÎö¹¹º¯Êý

Óë¹¹½¨Æ÷Ïà·´£¬Äܹ»ÔÚ¶ÔÏóÊÍ·Åʱ×Ô¶¯±»µ÷Óõķ½·¨±»³ÆÎªÎö¹¹º¯Êý¡£

PHP4Ö§³ÖÎö¹¹º¯Êý£¬Í¨¹ýµÇ¼ÔÚPHPÔËÐÐÖÕֹʱÓÃregister_shutdown_function()µ÷Óõĺ¯Êý£¬Ö»ÓÐÀàËÆµÄʵÐз½·¨¡£PHP5Õýʽ֧³ÖÎö¹¹º¯Êý£¬Äܹ»ÔÚÀàÖÐÖ¸¶¨¶ÔÏóÊÍ·ÅʱµÄ¶¯×÷¡£

Îö¹¹º¯Êý¾ÍÊÇÃûΪ__destructµÄ·½·¨¡£µ±¶ÔÏóÄÚ²¿µÄ²ÎÕÕ¼ÆÊýÆ÷±ä³É0µÄʱºò£¬__destruct()±»µ÷Óã¬È»ºó¶ÔÏóËùʹÓõÄÄÚ´æ±»ÊͷųöÀ´¡£

PHP´úÂë:--------------------------------------------------------------------------------


class MyDestructableClass {
¡¡function __construct() {
¡¡¡¡print "In constructor\n";
¡¡¡¡$this->name = 'MyDestructableClass';
¡¡}

¡¡function __destruct() {
¡¡¡¡print 'Destroying ' . $this->name . "\n";
¡¡}
}

$obj = new MyDestructableClass();
?>

--------------------------------------------------------------------------------


ÁíÍ⣬Óë¹¹½¨Æ÷ÏàͬµÄµØ·½ÊÇ£¬¸¸ÀàµÄÎö¹¹º¯Êý²»Äܱ»×Ô¶¯µÄµ÷Ó㬱ØÒªµÄʱºò£¬ÐèÒªÓÃÃüÁ

parent::__destruct();

¡ö·ÃÎÊ

ÔÚPHP4ÖУ¬Èç¹û·ÃÎÊÁËÒ»¸ö²»´æÔÚµÄÊôÐÔ£¬ÄÇôϵͳ¾Í»á×Ô¶¯Éú³ÉÓëÖ®Ïà¶ÔÓ¦µÄÐÂÊôÐÔ¡£

PHP´úÂë:--------------------------------------------------------------------------------
class Hoge {
}

$obj = new Hoge;
$obj->prop = "This is new property";

--------------------------------------------------------------------------------



ÈçÉÏËùʾ£¬µ±°ÑÖµ´úÈëÒ»¸ö²»´æÔÚµÄÊôÐÔʱ£¬ÄǸö´úÈëµã¾Í»á×Ô¶¯Éú³ÉÒ»¸öÐÂÊôÐÔ¡£Í¬ÑùµÄ£¬·ÃÎÊÒ»¸ö²»´æÔÚµÄÊôÐÔ£¬¾ÍÈçͬ±»´úÈëNULLÖµµÄ±äÁ¿Ò»Ñù£¬²»»á·¢Éú´íÎó¡£

ÔÚPHP5ÖÐ×·¼ÓÁËÒ»µã£¬¾ÍÊÇÄܹ»¶Ô·ÃÎÊÈÎÒâµÄÊôÐÔ½øÐпØÖÆ¡£ÔÚÀàÖÐÈç¹û´æÔÚ__set()¡¢__get()ÕâÑùµÄ·½·¨£¬Ìæ´úÉÏÊöµÄ¶¯×÷´Ë´¦µÄ·½·¨½«Äܹ»±»µ÷Óá£ÀýÈ磺

PHP´úÂë:--------------------------------------------------------------------------------


class Hoge {
¡¡function __set($name, $value) {
¡¡¡¡print "__set() is called with ($name, $value)\n";
¡¡¡¡$this->$name = $value;
¡¡}
}

$obj = new Hoge;

$obj->a = '123';
$obj->a = '456';
$obj->b = '789';
?>

--------------------------------------------------------------------------------


ÔÚÕâÀ__set ·½·¨±»×÷Ϊ䶨ÒåÊôÐԵĴúÈë·½·¨£¬ÔÚÏÔʾֵ֮ºó½«Öµ´úÈë䶨ÒåÊôÐÔ¡£

PHP´úÂë:--------------------------------------------------------------------------------
$obj->a = '123';

--------------------------------------------------------------------------------


Ö´ÐÐÕâÒ»¾äʱ£¬ÒòΪÔÚÕâ¸öʱºò²»´æÔÚÊôÐÔa£¬Òò´Ë£¬×÷Ϊ´úÌæ£¬__set ·½·¨±»µ÷Óá£

__set() is called with (a, 123)

Æä´Î£¬

$obj->a = '456';

ÔÙÒ»´ÎµÄ´úÈë$obj->a£¬ÕâÒ»´Î£¬ÓÉÓÚÊôÐÔaÒѾ­´æÔÚ£¬ËùÒÔ__set ûÓб»µ÷Ó㬺Íͨ³£Ò»Ñù°ÑÖµ´úÈëµ½ÁËÊôÐÔaÖÐÈ¥ÁË¡£

$obj->b = '789';

ÕâÒ»»Ø£¬ÎÒÃǰÑÖµ´úÈëÁíÒ»¸öÊôÐÔbÖУ¬Í¬aµÄµÚÒ»´ÎÇé¿öÒ»Ñù£¬

__set() is called with (b, 789)

ͬ__set ·½·¨Ïà·´£¬__get ·½·¨ÊÇÔÚ¶Ô²»´æÔÚµÄÊôÐÔµÄÒýÓÃʱµ÷Óõġ£½«ÕâÁ½Õß½áºÏÆðÀ´£¬ÔÙÀ´¿´Ò»Ï¶ÔÓÚÊôÐԵķÃÎÊ£¬Êµ¼ÊÉÏ£¬ÀûÓÃËüÄܹ»Ð´³öÔÚ²»Í¬µÄ³¡ºÏ¶¼ÄÜ×ö³ö²»Í¬ÏìÓ¦µÄÀàÀ´¡£

PHP´úÂë:--------------------------------------------------------------------------------


class Hoge {
¡¡public $properties;

¡¡function __set($name, $value) {
¡¡¡¡$this->properties[$name] = $value;
¡¡}
¡¡function __get($name) {
¡¡¡¡return $this->properties[$name];
¡¡}
}

$obj = new Hoge;

$obj->a = '123';
$obj->b = '456';
echo $obj->a;
echo $obj->b;

print_r($obj);
?>

--------------------------------------------------------------------------------


ÔÚÕâ¸öÀý×ÓÀ¶ÔÀàÖÐËùÓÐÊôÐԵķÃÎʱ»×°ÈëÁË$propertiesÖУ¬ÕâÑù£¬Ê¹ÎÒÃǼÓÈëµÄÊôÐÔ²»Ö±½ÓµÄ¸½ÔÚ¶ÔÏó֮ϡ£ÕâÊǸö²»Ì«ÄÜÈÝÒ×Àí½âµÄÀý×Ó£¬ÀýÈ磬ÊÔ×ŰÑÕâ¸öÀý×ÓÖеı£´æµ½$properties¸Ä³É´æÈëÎļþ»òÊÇÊý¾Ý¿â»áºÜÓÐȤ°É¡£Êµ¼ÊÉÏ£¬ÔÚ¶ÔÏóÀïÃæ£¬ÎÒÃÇÄܹ»¼òµ¥µÄʵÏÖÈÃÐí¶àµÄ¸´ÔӵIJÙ×÷¡£

Óë__set, __get¶àÉÙÓÐЩ²»Í¬£¬µ«ÊÇ__callÒ²ÄÜÓÃÀ´Êéд²»´æÔڵķ½·¨£¬µ±ÎÒÃÇÏòÈçÏÂÀý×ÓÒ»Ñùµ÷ÓöÔÏóµÄ·½·¨µÄʱºò£¬

$object->methodname();

Èç¹ûÕâ¸öÀàÖв»´æÔÚmethodnameÕâ¸ö·½·¨£¬Í¨³£Çé¿öÏ£¬¾Í»á³öÏÖÈçÏ´íÎó£º

Fatal error: Call to undefined method Class::methodname()

µ«ÊÇ£¬Èç¹ûÕâ¸öÀàÖдæÔÚ__callÕâ¸ö·½·¨£¬×÷ÎªÌæ´ú£¬__call¾Í±»µ÷Óá£__callµÄ²ÎÊýÓÐÁ½¸ö£¬µÚÒ»¸ö²ÎÊýÊDZ»½Ð³öµÄ·½·¨Ãû£¬µÚ¶þ¸ö²ÎÊýÊDZ£³ÖÁ˵ı»µ÷ÓõIJÎÊýµÄÊý×é¡£¿¼Âǵ½ÓкܶàµÄʹÓ÷½·¨£¬³ýÁËÒÔϵÄÀý×ÓÍ⣬»¹¿ÉÒÔʹÓÃÆäËüµÄ·½·¨¡£

PHP´úÂë:--------------------------------------------------------------------------------


class Proxy {
¡¡private $object;

¡¡function __call($name, $params) {
¡¡¡¡if (isset($this->object)) {
¡¡¡¡¡¡if (method_exists($this->object, $name)) {
¡¡¡¡¡¡return call_user_func_array(array($this->object, $name), $params);
¡¡¡¡¡¡}
¡¡¡¡¡¡else {
¡¡¡¡¡¡return "method not exists.";
¡¡¡¡¡¡}
¡¡¡¡}
¡¡}
¡¡function __construct($object) {
¡¡¡¡$this->object = $object;
¡¡}
}

class Hoge {
¡¡function add($var1, $var2) {
¡¡¡¡return $var1 + $var2;
¡¡}
}

$p = new Proxy(new Hoge);

$result = $p->add(1, 2);
echo "result: $result
\n";

$result = $p->sub(5, 3);
echo "result: $result
\n";
?>

ynwll ·¢±íÓÚ 2005-3-31 20:33

ºÃÎÄÕ£¬Ôػؼҿ´£ºP

Ò³: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.