|
 |
|
PHP การที่เขียน __ นำหน้า ทั้งใน function หมายถึงอะไรครับ? |
|
 |
|
|
 |
 |
|
ยกตัวอย่างให้ดูหน่อยครับ
|
 |
 |
 |
 |
Date :
2012-03-08 15:07:21 |
By :
webmaster |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ฟังก์ชั่นที่มี __ นำหน้านั้น php5 เรียกว่า magic method ครับ
เป็นฟังก์ชั่นที่เราใช้เป็น method ของคลาส มียกเว้นบางตัวที่เป็น global ฟังก์ชั่น
เช่นพวก __construct, __destruct, __get, __set, __isset, __unset
ที่เห็นบ่อยสุดก็คงเป็น __construct ซึ่งก็คือ constructor นั่นเอง
magic method เหล่านี้เป็นฟังก์ชั่นที่จะมีการทำงานเฉพาะ จะถูกเรียกใน context ต่างๆ ของการโปรแกรม
เช่น __set และ __get เป็น magic method ที่จะถูกเรียกเมื่อ "มีการเข้าถึงตัวแปรของ instance ที่ไม่มีอยู่ คือไม่ได้กำหนดไว้ในคลาส"
Code (PHP)
<?php
class A
{
public function __get($key) {
echo("__get $key\n");
return $key;
}
public function __set($key, $value) {
echo("__set $key = $value\n");
$this->$key = $value;
}
}
$a = new A();
echo($a->test . "\n"); // __get ถูกเรียกใช้ เพราะไม่มีสมาชิกชื่อ test ในคลาส A เมื่ออ่านค่าของ property test
$a->test = 555; // __set ถูกเรียกใช้ เพราะไม่มีสมาชิกชื่อ test ในคลาส A เมื่อกำหนดค่า $a->test
echo($a->test . "\n"); // มาถึงตรงนี้ __get จะไม่ถูกเรียกใช้แล้ว เพราะเนื่องจากการ __set ครั้งก่อนหน้าได้มีการกำหนด property test ให้กับ $a แล้ว
$a->test = 555; // __set ก็ไม่ถูกเรียกใช้แล้ว ด้วยเหตุผลเดียวกัน
?>
|
 |
 |
 |
 |
Date :
2012-03-08 17:21:53 |
By :
actioncookie |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|

|
Load balance : Server 02
|