![]()
|
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.7">
変数ã®ã‚¹ã‚³ãƒ¼ãƒ—変数ã®ã‚¹ã‚³ãƒ¼ãƒ—ã¯ã€ãã®å¤‰æ•°ãŒå®šç¾©ã•れãŸã‚³ãƒ³ãƒ†ã‚ストã§ã™ã€‚ã»ã¨ã‚“ã©ã® PHP 変数ã¯ã€ã‚¹ã‚³ãƒ¼ãƒ—ã‚’1ã¤ã ã‘æœ‰ã—ã¦ã„ã¾ã™ã€‚ã“ã®ã‚¹ã‚³ãƒ¼ãƒ—ã®ç¯„囲ã¯ã€ includeã‚„requireã«ã‚ˆã‚Šèªã¿ã“ã¾ã‚ŒãŸãƒ•ァイルもå«ã¿ã¾ã™ã€‚例ãˆã°ã€ ã“ã®ä¾‹ã§ã€å¤‰æ•°$aã¯ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã•れ㟠b.inc スクリプトã®ä¸ã§ã‚‚利用å¯èƒ½ã§ã™ã€‚ã—ã‹ã—〠ユーザー定義ã®é–¢æ•°ã®ä¸ã§ã¯å¤‰æ•°ã®æœ‰åŠ¹ç¯„å›²ã¯ãƒãƒ¼ã‚«ãƒ«é–¢æ•°ã®ä¸ã¨ãªã‚Šã¾ ã™ã€‚関数ã®ä¸ã§ä½¿ç”¨ã•れãŸå¤‰æ•°ã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§æœ‰åŠ¹ç¯„å›²ãŒé–¢æ•°å†…部ã«åˆ¶é™ ã•れã¾ã™ã€‚例ãˆã°ã€
ã“ã®ã‚¹ã‚¯ãƒªãƒ—トã¯ã€å‡ºåŠ›ã‚’å…¨ã行ã„ã¾ã›ã‚“。ã“れã¯ã€echo 命令ãŒãƒãƒ¼ã‚« ル版㮠$a 変数をå‚ç…§ã—ã¦ã„ã‚‹ã«ã‚‚ã‹ã‹ã‚らãšã€ã“ ã®ã‚¹ã‚³ãƒ¼ãƒ—ã§ã¯å€¤ãŒä»£å…¥ã•れã¦ã„ãªã„ã‹ã‚‰ã§ã™ã€‚ã“ã®å‹•作ã¯ã€ç‰¹ã«ãƒãƒ¼ã‚« ルãªå®šç¾©ã§ä¸Šæ›¸ãã—ãªã„é™ã‚Šã‚°ãƒãƒ¼ãƒãƒ«å¤‰æ•°ãŒè‡ªå‹•çš„ã«é–¢æ•°ã§ä½¿ç”¨å¯èƒ½ã§ ã‚ã‚‹ C 言語ã¨å°‘々異ãªã£ã¦ã„ã‚‹ã¨æ°—ãŒã¤ã‹ã‚Œã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。C言語㮠よã†ãªå ´åˆã€ã‚°ãƒãƒ¼ãƒãƒ«å¤‰æ•°ã‚’䏿³¨æ„ã§å¤‰æ›´ã—ã¦ã—ã¾ã†ã¨ã„ã†å•題を生㘠るå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚PHP ã§ã¯ã€ã‚°ãƒãƒ¼ãƒãƒ«å¤‰æ•°ã¯ã€é–¢æ•°ã®å†…部ã§ä½¿ç”¨ã™ ã‚‹å ´åˆã€é–¢æ•°ã®å†…部ã§ã‚°ãƒãƒ¼ãƒãƒ«ã¨ã—ã¦å®£è¨€ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚例を以 下ã«ç¤ºã—ã¾ã™ã€‚ 上ã®ã‚¹ã‚¯ãƒªãƒ—トã¯ã€"3" を出力ã—ã¾ã™ã€‚関数ã®å†…部㧠$aã€$b ã‚’ã‚°ãƒãƒ¼ãƒãƒ«å®£è¨€ã‚’行ã†ã“ã¨ã«ã‚ˆã‚Šã€ä¸¡å¤‰æ•°ã¸ã®å‚ç…§ã¯ã€ã‚°ãƒãƒ¼ãƒãƒ«å¤‰æ•° ã®æ–¹ã‚’å‚ç…§ã™ã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ã€‚ã‚る関数ã«ã‚ˆã‚Šæ“作ã§ãã‚‹ã‚°ãƒãƒ¼ãƒãƒ«å¤‰ æ•°ã®æ•°ã¯ç„¡åˆ¶é™ã§ã™ã€‚ ã‚°ãƒãƒ¼ãƒãƒ«ã‚¹ã‚³ãƒ¼ãƒ—ã‹ã‚‰å¤‰æ•°ã‚’アクセスã™ã‚‹2ç•ªç›®ã®æ–¹æ³•ã¯ã€PHPãŒå®šç¾©ã™ ã‚‹é…列$GLOBALSを使用ã™ã‚‹ã“ã¨ã§ã™ã€‚å…ˆã®ä¾‹ã¯ã€æ¬¡ ã®ã‚ˆã†ã«æ›¸ãæ›ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
é…列$GLOBALSã¯é€£æƒ³é…列ã§ã‚りã€ã‚°ãƒãƒ¼ãƒãƒ«å¤‰æ•°ã® åå‰ãŒã‚ーã€ãã®å¤‰æ•°ã®å†…容ãŒé…列è¦ç´ ã®å€¤ã¨ãªã£ã¦ã„ã¾ã™ã€‚ $GLOBALS ã¯ã€€ã‚¹ãƒ¼ãƒ‘ーグãƒãƒ¼ãƒãƒ« ã§ã‚ã‚‹ãŸã‚ã€$GLOBALSã¯å…¨ã¦ã®ã‚¹ã‚³ãƒ¼ãƒ—ã«å˜åœ¨ã—ã¾ã™ã€‚ 以下ã«ã‚¹ãƒ¼ãƒ‘ーグãƒãƒ¼ãƒãƒ«ã®åŠ¹æžœã‚’ç¤ºã™ä¾‹ã‚’示ã—ã¾ã™ã€‚
変数ã®ã‚¹ã‚³ãƒ¼ãƒ—ã«é–¢ã™ã‚‹åˆ¥ã®é‡è¦ãªæ©Ÿèƒ½ã¯ã€é™çš„ (static) 変数ã§ã™ã€‚é™çš„変数ã¯ãƒãƒ¼ã‚«ãƒ«é–¢æ•°ã‚¹ã‚³ãƒ¼ãƒ—ã®ã¿ã« å˜åœ¨ã—ã¾ã™ãŒã€ãƒ—ãƒã‚°ãƒ©ãƒ 実行ãŒã“ã®ã‚¹ã‚³ãƒ¼ãƒ—ã®å¤–ã§è¡Œã‚れるよã†ã«ãªã£ ã¦ã‚‚ãã®å€¤ã‚’失ã‚ãªã„ã¾ã›ã‚“。次ã®ä¾‹ã‚’見ã¦ãã ã•ã„。 ã“ã®é–¢æ•°ã¯ã€ã‚³ãƒ¼ãƒ«ã•れる度ã«$aã‚’ 0ã«ã‚»ãƒƒãƒˆã—ã€"0" を出力ã™ã‚‹ã®ã§ã»ã¨ã‚“ ã©å½¹ã«ãŸã¡ã¾ã›ã‚“。変数を1増や㙠$a++ ã¯ã€é–¢æ•°ã‹ã‚‰å¤–ã«å‡ºã‚‹ã¨å¤‰æ•° $aãŒæ¶ˆãˆã¦ã—ã¾ã†ãŸã‚ã«ç›®çš„ã‚’é”æˆã—ã¾ã›ã‚“。ç¾åœ¨ ã®ã‚«ã‚¦ãƒ³ãƒˆã®è¿½è·¡ãŒã§ãるよã†ã«ã‚«ã‚¦ãƒ³ãƒˆé–¢æ•°ã‚’使用ã§ãるよã†ã«ã™ã‚‹ãŸ ã‚ã«ã¯ã€å¤‰æ•°$aã‚’staticã¨ã—ã¦å®£è¨€ã—ã¾ã™ã€‚ ã“ã†ã™ã‚‹ã¨ã€Test() 関数ãŒã‚³ãƒ¼ãƒ«ã•れる度ã«$aã®å€¤ を出力ã—ã€ãã®å€¤ã‚’å¢—åŠ ã•ã›ã¾ã™ã€‚ static変数ã¯ã€å†å¸°é–¢æ•°ã‚’実ç¾ã™ã‚‹1ã¤ã®æ‰‹æ®µã¨ã—ã¦ã‚‚使用ã•れã¾ã™ã€‚å†å¸° 関数ã¯ã€è‡ªåˆ†è‡ªèº«ã‚’コールã™ã‚‹é–¢æ•°ã§ã™ã€‚å†å¸°é–¢æ•°ã‚’書ãã¨ãã«ã¯ã€ç„¡é™ ã«å†å¸°ã‚’行ã†å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€æ³¨æ„ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚é©å½“ãªæ–¹æ³•㫠よりå†å¸°ã‚’確実ã«çµ‚了ã•ã›ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚次ã®ç°¡å˜ãªé–¢æ•°ã¯ã€ä¸æ¢ã™ るタイミングを知るãŸã‚ã«static変数$countを用ã„ã¦ã€ 10 回ã¾ã§å†å¸°ã‚’行ã„ã¾ã™ã€‚
PHP4を駆動ã™ã‚‹Zend Engine 1ã§ã¯ã€ リファレンス変数ã®ä¿®æ£å static ãŠã‚ˆã³ global を実装ã—ã¦ã„ã¾ã™ã€‚ 例ãˆã°ã€é–¢æ•°ã‚¹ã‚³ãƒ¼ãƒ—内ã«global 命令ã«ã‚ˆã‚Šå®Ÿéš›ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れãŸçœŸã®ã‚°ãƒãƒ¼ãƒãƒ«å¤‰æ•°ã¯ã€ 実際ã«ã‚°ãƒãƒ¼ãƒãƒ«å¤‰æ•°ã¸ã®ãƒªãƒ•ァレンスを作æˆã—ã¾ã™ã€‚ ã“れã«ã‚ˆã‚Šã€ä»¥ä¸‹ã®ä¾‹ãŒç¤ºã™ã‚ˆã†ã«äºˆæ¸¬ã§ããªã„動作を引ãèµ·ã“ã™å¯èƒ½æ€§ ãŒã‚りã¾ã™ã€‚
ã“ã®ä¾‹ã‚’実行ã™ã‚‹ã¨ä»¥ä¸‹ã®å‡ºåŠ›ãŒçµæžœã¨ã—ã¦è¡¨ç¤ºã•れã¾ã™ã€‚
類似ã®å‹•作ãŒstatic命令ã«ã‚‚é©ç”¨ã•れã¾ã™ã€‚ リファレンスã¯é™çš„ã«ä¿å˜ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。
ã“ã®ä¾‹ã‚’実行ã™ã‚‹ã¨ä»¥ä¸‹ã®å‡ºåŠ›ã¨ãªã‚Šã¾ã™ã€‚
ã“ã®ä¾‹ã¯ã€static変数ã«ãƒªãƒ•ァレンスを代入ã—ãŸæ™‚ã« &get_instance_ref()関数を2回目㫠コールã—ãŸéš›ã«ä¿æŒã•れã¦ã„ãªã„ã“ã¨ã‚’示ã—ã¦ã„ã¾ã™ã€‚
|