• ベストアンサー

スコープ演算子について

php素人です スコープ演算子についておしえてください 質問1 スコープ演算子を使えばclass内の変数を下記のような書き方で取得できますか? 質問2 スコープ演算子を使うとアロー演算子でオブジェクトを作成するよりプログラムの負荷の軽減になるのですか? 質問3 アロー演算子を使わずにスコープ演算子を使ったほうがいいのでしょうか? 質問4 スコープ演算子のデメリットはありますか? class Message { public $number=1; function hello() { return "こんにちは"; } } $number = Message::$number; $message1 = Message::hello(); よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
noname#244856
noname#244856
回答No.1

前の回答で述べたとおり、「static」をつけるかどうかでどちらを使うべきか分かれます。 というかどちらかしか使えません。 静的に使うならば class Message {  public static $number = 1;  public static function hello() {   return "こんにちは";  } } $number = Message::$number; $message1 = Message::hello(); のように書かなくてはいけません。 誤った使い方 http://codepad.org/3OXZnCXS (こちらはFatalErrorが発生してスクリプトが停止) http://codepad.org/bQIHWH6O (こちらは動作はするが望ましくないというメッセージが発せられる) 負荷についてですが、静的コールのほうが動的コールよりも軽いです。 オブジェクト指向初心者のうちは全て動的に扱うようにし、 「このメソッド静的にしても問題ないんじゃ」と気づけばそのように変更すればいいと思います。 ちなみに静的メソッド内から他の静的メソッド・プロパティにアクセスしたい場合、 自分自身のクラス名(ここではMessage)の代わりに「self」を使うことが出来ます。 class Message {  public static $number = 1;  public static function echoNumber() {   echo self::$number;  } } Message::echoNumber(); 遅延静的束縛を利用するならば「static」というまた別の意味のstaticが現れますが、こちらはまだ知らなくてもいいでしょう。 http://php.net/manual/ja/language.oop5.late-static-bindings.php

flash0
質問者

お礼

回答ありがとうございます staticが重要だったんですね。静的コールは慣れてからにします。ありがとうございました