LXXVIオブジェクトプãƒãƒ‘ティã¨ãƒ¡ã‚½ãƒƒãƒ‰ã‚³ãƒ¼ãƒ«ã®ã‚ªãƒ¼ãƒãƒ¼ãƒãƒ¼ãƒ‰
è¦å‘Š |
ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€å®Ÿé¨“çš„ãªã‚‚ã®ã§ã™ã€‚ã“れã¯ã€ã“れらã®é–¢æ•°ã®å‹•作ã€é–¢æ•°åã¯ã€ã“ã®ãƒ‰ã‚ãƒ¥ãƒ¡ãƒ³ãƒˆã«æ›¸ã‹ã‚Œã¦äº‹é …ã¨åŒæ§˜ã«å‘ŠçŸ¥ãªãå°†æ¥çš„ãªPHPã®ãƒªãƒªãƒ¼ã‚¹ã§å¤‰æ›´ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚注æ„ã‚’å–šèµ·ã™ã‚‹ã¨ã¨ã‚‚ã«ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ä½¿ç”¨è€…ã®ãƒªã‚¹ã‚¯ã§ä½¿ç”¨ã—ã¦ä¸‹ã•ã„。 |
ã“ã®æ‹¡å¼µãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ç”¨é€”ã¯ã€ã‚ªãƒ–ジェクトã®ãƒ—ãƒãƒ‘ティã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã¨
メソッドã®ã‚³ãƒ¼ãƒ«ã®ã‚ªãƒ¼ãƒãƒ¼ãƒãƒ¼ãƒ‰ã‚’å¯èƒ½ã«ã™ã‚‹ã“ã¨ã§ã™ã€‚ã“ã®æ‹¡å¼µãƒ¢
ジュールã§å®šç¾©ã•れã¦ã„る関数ã¯ï¼‘ã¤ã ã‘ã§ã™ã€‚ã“ã®é–¢æ•°ã€
overload() ã¯ã“ã®æ©Ÿèƒ½ã‚’有効ã«ã™ã‚‹ã‚¯ãƒ©ã‚¹ã®åå‰ã‚’
引数ã¨ã—ã¾ã™ã€‚åå‰ã‚’指定ã•れãŸã‚¯ãƒ©ã‚¹ã§ã“ã®æ©Ÿèƒ½ã‚’使用ã—ãŸã„å ´åˆã¯ä»¥
下ã®é©å½“ãªãƒ¡ã‚½ãƒƒãƒ‰ã‚’定義ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れらã¯ã€
__get(),__set(),
__call()ã§ã€ãれãžã‚Œã€ãƒ—ãƒãƒ‘ティをå–å¾—ã€è¨å®šã€
メソッドをコールã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã™ã€‚オーãƒãƒ¼ãƒãƒ¼ãƒ‰æ©Ÿèƒ½ã¯é¸æŠžå¯èƒ½ã§
ã™ã€‚ã“れらã®ãƒãƒ³ãƒ‰ãƒ©é–¢æ•°ã®ä¸ã§ã‚ªãƒ¼ãƒãƒ¼ãƒãƒ¼ãƒ‰ã¯ç„¡åйã¨ã™ã‚‹ã“ã¨ãŒã§ãã€
ã“ã®å ´åˆã€ã‚ªãƒ–ジェクトã®ãƒ—ãƒãƒ‘ãƒ†ã‚£ã«æ™®é€šã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚
overload()関数ã®ç°¡å˜ãªä½¿ç”¨ä¾‹ã‚’ã„ãã¤ã‹ç¤ºã—ã¾ã™ã€‚
例 1PHPクラスã®ã‚ªãƒ¼ãƒãƒ¼ãƒãƒ¼ãƒ‰ <?php
class OO
{
var $a = 111;
var $elem = array('b' => 9, 'c' => 42);
// プãƒãƒ‘ティをå–å¾—ã™ã‚‹ãŸã‚ã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ãƒ¡ã‚½ãƒƒãƒ‰
function __get($prop_name, &$prop_value)
{
if (isset($this->elem[$prop_name])) {
$prop_value = $this->elem[$prop_name];
return true;
} else {
return false;
}
}
// プãƒãƒ‘ティをè¨å®šã™ã‚‹ãŸã‚ã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ãƒ¡ã‚½ãƒƒãƒ‰
function __set($prop_name, $prop_value)
{
$this->elem[$prop_name] = $prop_value;
return true;
}
}
// OOオブジェクトをオーãƒãƒ¼ãƒãƒ¼ãƒ‰ã™ã‚‹
overload('OO');
$o = new OO;
print "\$o->a: $o->a\n"; // 出力: $o->a:
print "\$o->b: $o->b\n"; // 出力: $o->b: 9
print "\$o->c: $o->c\n"; // 出力: $o->c: 42
print "\$o->d: $o->d\n"; // 出力: $o->d:
// OOã®$elemæŽ’åˆ—ã«æ–°è¦ã‚¢ã‚¤ãƒ†ãƒ を追åŠ
$o->x = 56;
// (PHP 4ã«çµ„ã¿è¾¼ã¾ã‚Œã¦ã„ã‚‹)stdclassã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’生æˆ
// $val ã¯ã‚ªãƒ¼ãƒãƒ¼ãƒãƒ¼ãƒ‰ã•れã¦ã„ã¾ã›ã‚“!
$val = new stdclass;
$val->prop = 555;
// $valオブジェクトを有ã™ã‚‹é…列ã¨ã—ã¦"a"ã‚’è¨å®š
// ã—ã‹ã—ã€__set() ã¯ã“れを$elemé…列ã«ä»£å…¥ã™ã‚‹
$o->a = array($val);
var_dump($o->a[0]->prop);
?> |
|
è¦å‘Š |
ã“ã®æ‹¡å¼µãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯å®Ÿé¨“çš„ãªã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã«ã‚りã€å…¨ã¦ã®æ©Ÿèƒ½ãŒå‹•作ã™
ã‚‹ã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“。ç¾åœ¨ã€__call()ã¯ã‚µãƒãƒ¼ãƒˆ
ã•れã¦ãŠã‚‰ãšã€ãƒ—ãƒãƒ‘ティã®å–å¾—ã¾ãŸã¯è¨å®šæ“作ã®ã‚ªãƒ¼ãƒãƒ¼ãƒãƒ¼ãƒ‰ã ã‘
ãŒå¯èƒ½ã§ã™ã€‚クラスã®å…ƒã®ã‚ªãƒ¼ãƒãƒ¼ãƒãƒ¼ãƒ‰ãƒãƒ³ãƒ‰ãƒ©ã‚’削除ã™ã‚‹ã“ã¨ã¯ã§
ãã¾ã›ã‚“。ã¾ãŸã€__set()ã¯ãƒ—ãƒãƒ‘ティã®ä¸€æ®µéšŽã«
ã‚¢ã‚¯ã‚»ã‚¹å ´åˆã«ã®ã¿å‹•作ã—ã¾ã™ã€‚
|
- 目次
- overload --
クラスã®ãƒ—ãƒãƒ‘ティãŠã‚ˆã³ãƒ¡ã‚½ãƒƒãƒ‰ã«é–¢ã—ã¦ã‚ªãƒ¼ãƒãƒ¼ãƒãƒ¼ãƒ‰ã‚’å¯èƒ½ã«ã™ã‚‹