The extended or derived class has all variables and functions of the
base class (this is called 'inheritance' despite the fact that nobody
died) and what you add in the extended definition.
、なぜこの単純な例では動作しないということである。
<?php
class A
{
private function a()
{
echo 'a';
}
public function b()
{
echo 'b';
}
}
class B extends A
{
//no extended definition, only what's inherited
}
$object_B = new B();
echo $object_B->b(); // fatal error: Call to private A::a() from invalid context
?>
いくつかの実験をした後、 メソッドをクラスA から削除すると機能します。そして私はどこでもそれを呼んでいません。
実際には、コンストラクタを作成したくありませんでした。そして、PHP7から始めて、__constructが唯一正しい方法です。 継承をテストする簡単な方法を書いたかったのです。 クラス名と同じ名前をメソッドに使用していました(メソッド名は** a **、クラス名は** A **) I大文字と小文字の区別がPHPで一貫していないため、このような誤りは単に起こり続けると思います。 – confused
さて、あなたが '__constructor'を作ろうとしていないと思ったので、あなたの' a'メソッドの名前を変更することを提案しました。これは、あまり知られていないPHPに関する "不具合"の1つです。 PHP7では、あなたは正しいです。しかし、ほとんどの環境ではまだ7が使用されていないため、これはまだ留意しておくべきことです。私の答えはあなたの質問に対処しましたか? :) –
はい、私はあなたの答えを受け入れました。しかし、これを理解しようと多くの時間を浪費しているので、さらに明確にするために、私はすぐにそれを忘れるでしょう: 1.関数名、メソッド名、クラス名はPHPでは大文字と小文字が区別されません 2.変数名、定数名、クラスプロパティ、クラス定数はPHPで大文字と小文字が区別されます 地球上で最も重要な媒体の中で最も人気のあるプログラミング言語の多くの癖があります。 – confused