• Blog.37to.net
    • home
    • blog
    • labs
    • about
    • contact
  • プログラミング・開発 > PHP4のメソッドにおけるstatic変数の挙動

    • PHP
    • オブジェクト指向
    作成:
    2006-02-06T23:54:15+09:00
    更新:
    2009-04-29T00:10:47+09:00
  • static変数の挙動で少しつまづいたのでメモ。
    クラスのメソッド内でstatic変数を使った場合、 同じクラスをインスタンスした別々のオブジェクトでも共有されるようだ。

    class A {
      var $name;
    
      function A($name){
        $this->name = $name;
      }
    
      function test(){
        static $i = 1;
        print $this->name.'で'.$i.'回目のtest()です。<br>';
        $i++;
      }	
    }
    $a = new A('A');
    $b = new A('B');
    $a->test();
    $a->test();
    $b->test();
    $b->test();
    

    を実行した時に

    Aで1回目のtest()です。
    Aで2回目のtest()です。
    Bで1回目のtest()です。
    Bで2回目のtest()です。
    

    となると思ってたんだけど、実際の実行結果は

    Aで1回目のtest()です。
    Aで2回目のtest()です。
    Bで3回目のtest()です。
    Bで4回目のtest()です。
    

    となる。

    他の言語におけるメソッド内でstaticを宣言した時の挙動は分からないが、 PHP4では上記のような挙動になる模様。

    この仕様を知らなかったので勉強になった。
    無駄にプロパティを増やしたくないんだけど、

    class A {
      var $name;
      var $i; 
      function A($name){
        $this->name = $name;
      }
    
      function test(){
        print $this->name.'で'.$this->i.'回目のtest()です。<br>';
        $this->i++;
      }	
    }
    

    と定義して回避するしかないみたい。

    • フォームクラスの仕様をメモ
    • ページ上部へ戻る
    • 明日から始まるインターン期間

    Posted at 37to : commetns(0) : trackbacks(0)

  • 同一カテゴリのエントリ

    • サイトをリニューアルした時のメモ
    • Kanasan.JS JSDeferred Code Readingが終了しました
    • JavaScriptでCSSとイベントを扱う from Kanasan.JS
    • Firebugで作るGreasemonkeyスクリプト〜入門と実践(From Kanasan.JS)
    • 2008年度のEmacsをまとめたメモ
  • 関連エントリ

    • PHPのコンストラクター
    • フォームクラスとデザインパターン
    • フォームクラスのサンプル
    • フォームの値にアクセスするクラスを思案中
    • del.icio.usからはてブにエクスポートするスクリプト
  • 関連商品

  • コメント

    コメントはありません
  • トラックバック

    本エントリへのトラックバックURL http://blog.37to.net/mt/mt-tb.cgi/12

    トラックバックはありません
  • About

    about

    Name
    37to (minato)
    Job
    Web Developper
    Community

    Kanasan.JS

    関西を中心に活動するJavaScriptの勉強会

    ...more about

    Twitter Updates

      follow me on Twitter
    • Categories

      • Web・コンピュータ(21)
      • お知らせ(1)
      • コンピュータ・ガジェット(2)
      • プログラミング・開発(39)
      • 雑記(12)
    • Tags

      • (X)HTML
      • CSS
      • del.icio.us
      • Firefox
      • JavaScript
      • Kanasan.JS
      • MovableType
      • PHP
      • Python
      • RSS
      • SBM
      • Web
      • はてな
      • イベント
      • オブジェクト指向
      • テンプレート
      • デザイン
      • フォーム
      • 雑記
      • 勉強会
    • Archives

      • 2009年6月(3)
      • 2009年4月(2)
      • 2009年3月(1)
      • 2009年2月(1)
      • 2009年1月(1)
      • 2008年12月(1)
      • 2008年11月(2)
      • 2008年10月(1)
      • 2008年8月(1)
      • 2008年7月(1)

      ...more archives

    • Feeds

      • blog feedBlog.37to.netBlog.37to.netのフィード
      • 37to's reading new feedlivedoor Readerの新着フィード - k_37to
      • 37to's New Bookmark Feeddel.icio.us - 37to's Bookmark Feeds
    • Sorcial Bookmarks

      • livedoor クリップ - k_37tolivedoor クリップ - k_37to
      • はてなブックマーク - k_37toはてなブックマーク - k_37to
    • Copyright © Since 2006-2009 37to
    • Home | blog | labs | about | contact | feed