echo 'これは卒業生です';
}
?>
上記の例からもわかるように、複数のクラスに共通の属性やメソッドが多い場合、コードの再利用性が高くなく、CSSでの処理方法を考えてください
。解決策: 継承
コードをコピーします
コードは次のとおりです:
クラス 学生{
public $name;
public function __construct($name,$age){
$this->name=$name; =$age;
}
public function showinfo(){
echo $this->name.'||'.$this->age;
}
}
class Pupil extends Students{
function testing(){
echo '生徒 '.$this->name.' はテスト中です';
}
}
class Grade extends Students{
function testing(){
echo '卒業生 '.$this->name.' はテスト中です';
}
}
$stu1=新しい生徒('张三',20);
echo '
'; );
?>
上記からわかるように、継承は、親クラス (BaseClass) の public および protected 属性とメソッドを継承することはできません。メソッド
文法構造:
クラスの親クラス名 {}
クラスのサブクラス名は親クラス名を拡張します
詳細:
1. 必要に応じて、サブクラスは 1 つの親クラスのみを継承します。複数のクラスの属性とメソッドを継承するには、マルチレベルの継承を使用できます
例:
コードをコピー
コードは次のとおりです: class A{
public $name=' AAA';
}
クラス B は A{
public $age=30;
}
クラス C は B{}
$p=new C(); //AAA になりますここに出力します
?>
2. サブクラス オブジェクトを作成するとき、その親クラスのコンストラクターはデフォルトでは自動的に呼び出されません。 例:
class A{
public function __construct(){
echo 'A';
}
}
class B extends A{
public function __construct(){
echo 'B';
}
}
$b=new B();//B のコンストラクターがあれば最初に出力されます。 B にコンストラクターがない場合、A の
3 が出力されます。サブクラス内の親クラスのメソッドにアクセスする必要がある場合 (コンストラクター メソッドとメンバー メソッドの修飾子が protected または private である場合)、親クラスを使用できます。 ::メソッド名または親::メソッド名を完成させます [ここで、前述の親と自己は両方とも小文字であり、エラーは大文字で報告されます]
class A{
public function test(){
echo 'a_test';
}
}
class B extends A{
public function __construct() {
//どちらのメソッドもOK
A::test()
}
}
$b=new B ();
5. サブクラス (派生クラス) のメソッドが親クラス (public、protected) のメソッドとまったく同じである場合、それをメソッド オーバーライドまたはメソッド オーバーライド (オーバーライド) と呼びます。次の多態性を参照してください。
3. ポリモーフィズム
例:
コードをコピー
コードは次のとおりです。 echo 'I don't know'; }
}
class Dog extends Animal{
//オーバーライド、function cry(){ echo 'Wang Wang!' Animal::cry();//いいえエラーはここで報告され、親クラスの cry() は正しく実行されます。 $dog1=new Dog();
;概要:
1. 親クラスがすべてのサブクラスにメソッドがあることを知っているが、そのクラスがそのメソッドの記述方法を決定できない場合、メソッドのオーバーライド (書き換え) にはメソッドが必要です。サブクラスの名前とパラメータの数はまったく同じです。 2. サブクラスが親クラスのメソッド (保護/パブリック) を呼び出したい場合は、親クラス名::メソッド名または親::メソッド名を使用できます。
3. メソッドの書き換えを実装する場合、アクセス修飾子は異なっていてもかまいませんが、サブクラス メソッドのアクセス権は親クラス メソッドのアクセス権以上である必要があります (つまり、親クラス メソッドのアクセス権は許可されません)。
たとえば、親クラスの public 関数 cry(){} とサブクラスの protected 関数 cry(){} はエラーを報告します
ただし、サブクラスのアクセス権は次のように拡大できます。
親クラス private function cry(){} サブクラスの保護関数 cry(){} が正しく実行可能
拡張機能:
メソッドのオーバーロード(オーバーロード)
基本概念: 関数名は同じですが、パラメータの数やパラメータの型が異なります同じ関数を呼び出すことで異なる関数を区別できます
PHP5 ではオーバーロードもサポートされていますが、PHP5 では同じ名前の複数の関数を定義できません
PHP5 はこれらのマジックを使用して強力な「マジック」関数を提供します。関数を使用すると、関数のオーバーロードを実現できます。
ここで __call に移動する必要があります。オブジェクトがメソッドを呼び出し、そのメソッドが存在しない場合、プログラムは自動的に __call を呼び出します。
[公式には非推奨]
には次のマジック定数があります。 PHP: __LINE__ __FILE__ __DIR__ __FUNCTION__ __CLASS__ など
例:
コードをコピー
コードは次のとおりです:
class A{
function test1($p){
echo 'test1
';
}
function test2($p){
echo 'test2
';
}
function __call($method,$p){
//ここで $p は配列で、上記 2 つの変数名はカスタマイズ可能です
if($method == 'test'){
if(count($p) ) ==1){
$this->test1($p);
} else if(count($p)==2){
}
}
$a=new A();
$a->test(3,5);
http://www.bkjia.com/PHPjc/325493.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/325493.html技術記事オブジェクト指向オブジェクトの 3 つの主要な特性: カプセル化、継承、ポリモーフィズム まず、抽象化について簡単に理解しましょう。先ほどクラスを定義したとき、実際には、モノのクラスに共通の属性を組み合わせました。