複習類和物件
類:由眾多物件抽象出來的
物件:通過類例項化出來的
<?php
class info
function say()
function set***()
function get***($s)
function __set($a,$n)
function __get($a)
}//例項化物件
$r =new info("男");
$r->code ="join";
$r->say();
//$r->***; //報錯的,因為是面向類的
var_dump($r);
繼承
相對于父與子的關係,可以聯想到人
概念:如果有乙個子類那麼該子類會繼承父類的一切東西 (私有成員訪問不到)
做法:要求有父類和子類
在定義子類的時候需要加乙個關鍵字:extends
特點:單繼承,乙個子類只能有乙個父類, 聯想到人:兒子只能有乙個父親,但是父親可以有多個兒子
如果父類中有建構函式,子類在例項化的時候按照父類的建構函式的標準來例項化
parent 代表弗雷,只能在子類中使用,整合的是info,寫info也是可以的,但最好不要寫不利於維護
final:用來修飾類的,代表該類是乙個最終類,該類無法被繼承 ,使用時寫在父類上面的
<?php
//final class info
class info
function say() }
class test extends info
function say()
}$t = new test("男");
$t->code = "p001";
//echo $t->***;//報錯了,訪問不到
//$t->run(); //父類中沒有的新方法的輸出
$t->say(); //父類中有的方法的輸出,不過父類的被覆蓋了
var_dump($t);
靜態成員
普通成員是體現在物件上的
類裡面的普通成員是屬於物件的,不屬於類的(呼叫的時候是用物件呼叫)
什麼叫做靜態的:靜態的成員是屬於類,不是屬於每個物件的
static關鍵字定義靜態的,定義靜態成員使用static關鍵字
靜態方法裡面不能呼叫普通成員,不能用$this,而是用self
靜態方法可以呼叫靜態成員但是要使用self關鍵字
self代表該類,$this 代表該物件
<?php
class info
function __construct($s)
function say() }
$r =new info("男");
echo info::$class ="0305"; //訪問靜態成員
echo info::test(); //靜態裡面不可以呼叫普通成員
$r->say();
//也就是說:靜態裡面不可以呼叫普通的,普通方法裡面可以呼叫靜態的,靜態方法裡面可以呼叫靜態成員
多型:
多型的概念:當父類引用指向子類例項的時候,由於子類對父類函式進行了重寫,導致我們在使用該引用去呼叫相應的方法表現出的不同
條件:1.必須有繼承
2.父類的引用指向子類的例項
3.子類必須要對父類的方法進行重寫
<?php
class ren
}class china extends ren }
class america extends ren
}$r = new ren(); // $r代表ren類的引用
$r1 = new china(); //$r1代表china類的引用
$r2 =new america();//$r2代表america類的引用
$r->say(); //hello
$r1->say(); //你好
$r2->say();//輸出hi
?>
在c#中ren $r =new ren();以後用到的所有的$r時就是ren的型別的,以後的賦值都沒有任何的作用
ren $r = new china();c#中也是可以的,是引用$r指向china的子類
再比如:ren $r = new america();會像上輸出america類裡面的一些方法
函式的過載:
關於過載,一般出現在強型別語言中,弱型別語言中不存在,因此這裡只是知道有這樣的定義,會出現在一些面試的場合。所以條件概念都是必記得內容
假如在php中有過載時:所有以下都是假設存在的
<?php
class ren
function say($a)
function say($a,$b)
}$r = new ren();
$r->say(); //會根據裡面寫的引數的個數輸出的內容不同
?>
過載實現的條件:1)函式名必須相同(方法名)
2)在函式裡面的引數的個數不同(方法名相同的基礎上)
3)如果引數的個數相同時,型別不同
eg:function say(int,$a) 和 function say(string,$b)
php是弱型別語言所以沒有過載:首先php什麼型別都可以儲存因此型別不同的條件不能滿足,
php裡面有可變引數的函式,因此引數個數不同這一塊很難實現
__tostring()方法的不同於c#中的,在c#中是轉換成字串型別
<?php
class ren
function __tostring() }
$r =new ren(); //__tostring用法的輸出
echo $r;
?>
物件的轉殖:
<?php
class ren
function __clone() //物件轉殖的時候自動執行
}$r =new ren();
$r->name = "張三";
$r1=clone $r;
echo $r->name;
echo $r1->name;
var_dump($r1);
?>
轉殖物件相當於複製乙份交給$r1,在function方法中$this是指新轉殖出來的物件
繼承,多型,過載的區別
學習隨手記。過載 同一方法或者構造器的獨一 各種引數型別 的排序組合,所能用的方法。其中構造器可以起到初始化類的作用,以便通過構造器設定類的不同例項。繼承 為了復用 而具體化自超類的子類。多型 為了類之間解耦而做的設計。greentea tiguanyin new greentea 例項化乙個物件,...
4月28日小結
4月28日小結 在這一周我們打了好多的訓練賽,在星期六下午的浙江省賽中,我一開始以為k題是乙個簡單的字串問題,以為很好a掉的,但是看懂這個題就廢了好久時間,並且看懂以後打起來不知道該從什麼地方下手打,就開始跟著榜打。那個h題,說實話是真的不難做,並且沒有用到現在學習的演算法,就是普通的if判斷而已,...
封裝繼承多型 繼承重寫過載
物件導向三大基本特徵 封裝 繼承 多型 封裝 首先封裝的意思就是將客觀事物封裝成抽象的類,封裝可以看做是乙個保護屏障,將實現細節全都隱藏起來,防止該類的 和資料被外部類定義的 隨機訪問。要訪問該類的 和資料,必須通過嚴格的介面控制。他的優點在於1.良好的封裝能夠減少耦合。2.類的內部結構可以自有修改...