

クラス内のメンバ関数からクラス内の別のメンバ関数にアクセスしたいです  
自分は

[code]

    class X {
        public function a() {
            $x = 1234;
        }
        public function b() {
            print $x;//1234
        }
    
    }
    
[/code]

のようなことを行いたいと思ってます。  
可能であればどんな書き方が最も正しいのかご教授ください

訳あってclass変数ではなく、関数内ではじめて定義された変数にアクセスしたいです

又、こういう処理が適切でない場合、皆様はclass内で定義される関数をどのようにして繋げて一まとめにしているのか

書き方の基礎を教えてくれると幸いです


CC BY-SA 3.0
2016-06-17T01:16:47.853
26805
2016-06-17T07:07:58.710
2016-06-17T01:30:29.497
16829
16829
question
php
php、classの書き方について


サンプルの意味をそのままで解釈するのであれば、  
考えているような実装はできないと思います。

意図がまったく見えないので説明のしようがないですが、  
PHPのスコープを学習すべきかと思います。  
<http://php.net/manual/ja/language.variables.scope.php>


CC BY-SA 3.0
2016-06-17T02:57:58.517
26808
2016-06-17T02:57:58.517
16781
26805
answer


クラスの中だけで使うのであればこうじゃないですか？  
クラスの外に置いたら管理できないかと……

[code]

    class X {
        private $val; 
        public function a() {
            $this->val = 1234;
        }
        public function b() {
            print $this->val;//1234
        }
    }
    
[/code]


CC BY-SA 3.0
2016-06-17T04:08:50.490
26810
2016-06-17T04:08:50.490
26805
answer


> class内で定義される関数をどのようにして繋げて一まとめにしているのか

PHPなどの多くの言語では、関数内で定義された変数はその関数の中でだけ生きています。その関数を抜けたらその変数はアクセスできないだけでなく、消滅するとお考えください。

このように決めておくことで、関数内でしか使われない変数のためのメモリ領域を自動的に解放できますし、意図せずして他の関数に影響を与えたり、与えられたりといった問題を回避できます。

globalで実現したとコメントにありますが、

[code]

    class X {
        public function a() {
            global $x;
            $x = 1234;
        }
        public function b() {
            global $x;
            print $x;//1234
        }
    }
    
[/code]

このようにした場合、クラスXの各インスタンス、 `global $x` を使っている別クラス、グローバルスコープで定義された `$x`
全てが同じ変数を共有することになります。別ファイルをrequireなどで読み込む場合はそこも含まれます。（そこまで意図しているなら問題ありませんが）

それよりメンバ変数を使った方がスコープを抑えられますし、グローバル変数のような使い方であっても名前の競合を回避しやすい静的メンバ変数を検討したほうが安全かと思います。


CC BY-SA 3.0
2016-06-17T07:07:58.710
26811
2016-06-17T07:07:58.710
8000
26805
answer