こちらPHPマニュアルにおける「スタティックではないメソッドを非互換のコンテキストでスタティックに呼び出すと」こちらの部分の「非互換のコンテキスト」とはどういうものを指すのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
php
1 2class Clazz { 3 public function func() { 4 } 5} 6 7Clazz::func();
投稿2019/05/25 04:06
編集2019/05/25 04:09退会済みユーザー
総合スコア0
0
ベストアンサー
国語力の問題な気がしますが・・・。
非互換という言葉を、分解して考えてみましょう。
相互に置き換えることができない(非)
となりますよね?
クラスに置ける、スタティックなメソッドないし、メンバは、
例えば、
php
1class test1 { 2 static $num = 0; 3} 4test1::num += 1; 5echo test1::num; // 出力1
というように、クラス外で処理を加えた時、
test1クラスに値が保持される(スタティック)ため、
外側の処理で置き換えることができる、
つまり可互換なわけです。(そんな言葉ありませんが、わかりやすく言うために)
では、非互換はというと、
php
1class test1 { 2 public $num; 3} 4test1::num = 0; // 多分この時点でエラー。外側で静的に処理できるメンバではないため。 5 6// こっちならできる 7$instanse1 = new test1(); 8$instanse1->num = 1; 9$instanse1->num += 1; 10echo $instanse1->num; // 出力2 11 12// だが、インスタンスを生成しなおせば、当然値はリセットされる 13$instanse2 = new test1(); 14echo $instanse2->num; // 2とは当然出てこない。nullかエラー
これは、メンバnumがスタティックではないため、
各呼び出しやインスタンス間で相互に置き換えることができない、
すでに別物になっているからです。
なので、非互換となるのです。
って、ここまで書いといて、解釈や構文間違ってたらすみません。。。。
して、
言葉遊びで、その言葉なんなの?って思考が止まると、時間がもったいない気がします。
それだったら、やってみて、動かしてみて、言葉の意味はわからないけど、こういった時こう動く(エラーが起きる)ってことを言ってるのか!と理解した方がいい気がします。
だって、リンゴはリンゴですし、その言葉の意味って、リンゴ→林檎→林と檎、じゃぁ、林の意味は、檎の意味は・・・って、いちいちやってたら、前に進めないと思いません?
これは、完全に私見なので、あれですが・・・。
投稿2019/05/25 14:01
総合スコア9528
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/25 04:14
退会済みユーザー
2019/05/25 04:18 編集
2019/05/25 04:21
退会済みユーザー
2019/05/25 04:25
2019/05/25 06:07 編集