µ±Ç°Î»Ö㺠´úÂëÃÔ >> PHP >> php魔术方法和魔æœ?�˜é‡
  Ïêϸ½â¾ö·½°¸

php魔术方法和魔æœ?�˜é‡

Èȶȣº99   ·¢²¼Ê±¼ä£º2016-04-28 22:48:06.0
php魔术方法和魔æœ?�˜é‡?

PHP把所有以__(两ä¸?¸‹åˆ’线)开头的类方法当æˆ�é­”æœ?–¹æ³•ã?‚所以你定义è‡?·±çš„类方法时,ä¸�è?ä»?/span> __为å‰�ç¼?ã€?/span>

 

1�/span>__construct()

当实例化ä¸?ä¸??象的时å?™ï¼Œè¿™ä¸ªå¯¹è±¡çš„æž„造方法将首先è¢?°ƒç”?¼›

我们知é�“php5对象模型和类å��相å�Œçš„函数æ˜?±»çš„æž„造函数,那么如果å�Œæ—¶å®šä¹‰æž„é? å‡½æ•°å’Œ__construc()方法的è¯�ï¼?/span>php5会默认调ç”?/span>__contruct()而ä¸�会调用å�Œç±»å��函数,所ä»?/span>__contruct()作为类的默è?æž„é? å‡½æ•°ï¼›

 

2�/span>__destruct()

æž�构函数会在到æŸ�ä¸??象的æ‰?有引用都è¢?ˆ é™¤æˆ–者当对象è¢?˜¾å¼�销æ¯�时执è?ã€?/span>

 

3�/span>__get(string $name)

当试图è?å�–一ä¸?¹¶ä¸�存在的属æ?§æ—¶è¢?°ƒç”?¼›å¦‚果试图读å�–ä¸?ä¸??象并ä¸�存在的属æ?§çš„æ—¶å?™ï¼Œphp就会给出错è?的信æ�??‚å?果在类里添加__get方法,并且我ä»?�¯ä»¥ç”¨è¿™ä¸ªå‡½æ•°å®žçŽ°ç±»ä¼¼javaä¸?š„å��å°„çš„å�„ç§�æ“�作ã??/span>

 

4�/span>__set(string $name, mixed $value)

给未定义的å�˜é‡�赋值时将è?调用

 

5�/span>__call(string $name, array $arguments)

当调用一ä¸?¸�å�??é—?–¹æ³•(如未定义,或者ä¸�å�??)时,__call() 会è?调用ã€?/span>

__callStatic(string $name, array $arguments)

当在é�™æ?�方法中调用ä¸?ä¸?¸�å�??é—?–¹æ³•(如未定义,或者ä¸�å�??)时,__callStatic() 会è?调用ã€?/span>

 

6�/span>__toString()

当打å�°ä¸€ä¸??象的时å?™è?调用,这ä¸?–¹æ³•类似于javaçš?/span>toString方法,当我们直接打å�°å¯¹è±¡çš„æ—¶å€™å›žè°ƒè¿™ä¸?‡½æ•°ã??/span>

 

7�/span>__clone()

当å?象è?克隆时调用ã??/span>

 

8�/span>__sleep()

serialize()函数会æ?查是å�¦å­˜åœ¨ä¸€ä¸?­”æœ?–¹æ³?/span> __sleep.如果存在ï¼?/span>__sleep()方法会先è¢?°ƒç”?¼Œ ç„¶å�Žæ‰�执行åº�列化æ“�作。这ä¸?ŠŸèƒ½å�¯ä»¥ç”¨äºŽæ¸…ç�†å?象,并返回一ä¸?Œ…å�??象中æ‰?有å�˜é‡�å��称的数组。å?æžœè?方法ä¸�返回任何内容,åˆ?/span>NULLè¢?º�列化,å?è‡?/span> ä¸?ä¸?/span>E_NOTICEé”™è?。__sleep方法常用于æ��交未æ��交的数æ�?¼Œæˆ–类似的æ“�作。å�Œæ—¶ï¼Œå¦‚果你有ä¸?些很大的对象,ä¸�éœ?è¦�ä¿�存,这个功能就很好用ã€?/span>

 

9�/span>__wakeup()

ä¸?/span>__sleep() 相å��ï¼?/span>unserialize()会æ?查是å�¦å­˜åœ¨ä¸€ä¸ª__wakeup方法。å?果存åœ?¼Œåˆ™ä¼šå…ˆè°ƒç”?/span> __wakeup方法,é?先准备å?象数æ�???/span> __wakeupç»�常用在å��åº�列化æ“�作ä¸?¼Œä¾‹å?é‡�新建立数æ�®åº“连接,或执行其它åˆ�始化æ“�作ã€?/span>


10�/span>__isset()

当å?æœ?®šä¹‰çš„å�˜é‡�调用isset() æˆ?/span> empty()时,__isset() 会è?调用ã€?/span>

 

11�/span>__unset()

unsetä¸?ä¸??象的属æ?§æ—¶è¢?°ƒç”¨ã?‚å?ï¼?/span>unset($c->name)ã€?/span>

 

12�/span>__set_state()

调用var_export时,è¢?°ƒç”¨ã?‚用__set_state的返回å?¼å�šä¸?/span>var_export的返回å?¼ã??/span>

 

13�/span>__autoload()

实例化一ä¸??象时,å?æžœå?应的类ä¸�存在,则该方法è?调用。简å�•的说就æ˜?±»çš„自动加è½?/span>;当你å°�试使用ä¸?ä¸?/span>PHP没有组织到的ç±?/span>, 它会寻找ä¸?ä¸?/span>__autoload的全å±?函数. 如果存在这个函数,PHP会用ä¸?ä¸?�‚æ•°æ�¥è°ƒç”¨å®?/span>,å�‚æ•°å�³ç±»çš„å��ç§°ã??/span>

 

14�/span>__invoke()

当å°�试以调用函数的方å¼�调用一ä¸??象时,__invoke 方法会è?è‡?Š¨è°ƒç”¨ã€?/span>

 

魔术常�:

__LINE__ 文件ä¸?š„当å‰�行å�·ã€?/span> 

__FILE__ 文件的完整路径和文件å��ã?‚å?果用在è?包å�«æ–‡ä»¶ä¸?¼Œåˆ™è¿”回è?包å�«çš„æ–‡ä»¶å��。自 PHP 4.0.2 起,__FILE__ 总是包å�«ä¸?ä¸?»�对路径(如果æ˜??å�·è¿žæŽ¥ï¼Œåˆ™æ˜¯è§£æž�å�Žçš„ç»�å?è·?¾„),而在此之å‰�的版本有时会包å�?¸€ä¸?›¸å¯¹è·¯å¾„ã??/span> 

__DIR__ 文件æ‰?在的ç›?½•。å?果用在è?包括文件ä¸?¼Œåˆ™è¿”回è?包括的文件所在的ç›?½•。它等价äº?/span> dirname(__FILE__)。除é�žæ˜¯æ ¹ç›®å½•,å�¦åˆ™ç›?½•ä¸?��ä¸�包æ‹?œ«å°¾çš„æ–œæ� ã€‚(PHP 5.3.0ä¸?–°å¢žï¼‰ = 

__FUNCTION__ 函数å��ç§°ï¼?/span>PHP 4.3.0 新加)ã?‚自 PHP 5 起本常é‡�返回该函数è?定义时的å��字(区分大å°�写)ã?‚在 PHP 4 ä¸??值æ?»æ˜¯å°�写字æ¯�çš„ã??/span> 

__CLASS__ 类的å��ç§°ï¼?/span>PHP 4.3.0 新加)ã?‚自 PHP 5 起本常é‡�返回该类è¢?®šä¹‰æ—¶çš„å��字(区分大å°�写)。在 PHP 4 ä¸??值æ?»æ˜¯å°�写字æ¯�çš„ã??/span> 

__METHOD__ 类的方法å��(PHP 5.0.0 新加)ã?‚返回è?方法è¢?®šä¹‰æ—¶çš„å��字(区分大å°�写)ã€?/span> 

__NAMESPACE__ 当å‰�命å��空间的å��称(大å°�写æ•�感)。这ä¸?¸¸é‡�是在编译时定义的(PHP 5.3.0 æ–°å?ï¼?/span> 

  Ïà¹Ø½â¾ö·½°¸