電子書籍の厳選無料作品が豊富!

php素人です

スコープ演算子についておしえてください


質問1
スコープ演算子を使えばclass内の変数を下記のような書き方で取得できますか?

質問2
スコープ演算子を使うとアロー演算子でオブジェクトを作成するよりプログラムの負荷の軽減になるのですか?

質問3
アロー演算子を使わずにスコープ演算子を使ったほうがいいのでしょうか?

質問4
スコープ演算子のデメリットはありますか?



class Message {
public $number=1;

function hello() {
return "こんにちは";
}

}

$number = Message::$number;
$message1 = Message::hello();


よろしくお願いします

A 回答 (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-stat …
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/10/01 22:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!