PHP——面向对象
?
<body> <?php //類調(diào)用用:: //對(duì)象調(diào)用用-> class Dog1//定義類 {//成員屬性(變量)var $name;var $age;var $pinzhong;//成員方法function Jiao1(){$this->name; echo "{$this->name}在叫";//this代表當(dāng)前對(duì)象 調(diào)用類中的對(duì)象用$this } }$dog= new Dog1(); $dog->name = "旺財(cái)";//->調(diào)用變量 $dog->age = "10"; $dog->pinzhong = "哈士奇";$dog->Jiao1();//調(diào)用方法 ?> <br /> <?php class Dog {//成員屬性(變量)var $name;var $age;var $pinzhong;//構(gòu)造函數(shù) 每個(gè)類都有 //1、在類的實(shí)例化的時(shí)候第一個(gè)執(zhí)行//2、寫法特殊 和類名一樣,沒有返回類型public Dog(){}function __construct($n,$a,$p)//兩個(gè)下劃線 可以傳值 對(duì)定義的變量初始化 {$this->name = $n;$this->age = $a;$this->pinzhong = $p;}function Jiao(){$this->name; echo "{$this->name}在叫";//this代表當(dāng)前對(duì)象 調(diào)用類中的對(duì)象用$this } }$dog= new Dog("旺財(cái)","10","哈士奇");$dog->Jiao(); ?> <br /> <?php //封裝:將類里面的成員保護(hù)(private),外界無(wú)法直接訪問(wèn) //public protect private 此類 //封裝之后用常用方法調(diào)用 缺點(diǎn):需要寫很多方法很麻煩 class Dog2 {private $name;private $age;private $pinzhong;function setname($n)//方法 {$this->name=$n;}function setage($a){if($a>=1 && $a<=5){$this->age=$a;}}function __construct($n,$a,$p)//兩個(gè)下劃線 可以傳值 對(duì)定義的變量初始化 {$this->name = $n;$this->age = $a;$this->pinzhong = $p;}function Jiao(){echo "{$this->name}:{$this->age}在叫"; } } $dog = new Dog2("汪哥","3","金毛"); $dog->setname("小強(qiáng)"); $dog->setage("6"); $dog->Jiao();?> <?php //封裝 set()方法和 get()方法 class Dog3 {private $name;private $age;private $pinzhong;function __set($name,$value)//賦值的時(shí)候自動(dòng)調(diào)用 {$this->$name = $value;}function __get($name)//取值的時(shí)候自動(dòng)調(diào)用 {return $this->$name;}function __construct($n,$a,$p)//兩個(gè)下劃線 可以傳值 對(duì)定義的變量初始化 {$this->name = $n;$this->age = $a;$this->pinzhong = $p;}function Jiao(){echo "{$this->name}:{$this->age}在叫"; } } $dog = new Dog3("汪哥","3","金毛"); $dog->name="大毛";//賦值的時(shí)候調(diào)用set()方法 $dog->age="1";echo "<br />"; echo $dog->name;//取值的時(shí)候調(diào)用get()方法echo "<br />"; echo $dog->pinzhong;echo "<br />"; $dog->Jiao();//繼承 class Hashiqi extends Dog3 {function Jiao(){parent::Jiao();//調(diào)用父類的方法 parent//或Dog::Jiao() 用父類名; echo "\t";echo "hello";//不寫上面是方法重寫 } } $dog = new Hashiqi("汪哥","3","金毛"); $dog->name="大毛";//賦值的時(shí)候調(diào)用set()方法 $dog->age="1";echo "<br />"; echo $dog->name;//取值的時(shí)候調(diào)用get()方法echo "<br />"; echo $dog->pinzhong;echo "<br />"; echo "<br />"; $dog->Jiao(); //類前面加final不能被繼承 //static靜態(tài)屬于類,非靜態(tài)屬于對(duì)象 靜態(tài)變量不用實(shí)例化,通過(guò)類直接調(diào)用 用::調(diào)用里面的成員用self 靜態(tài)方法不能調(diào)用非靜態(tài)的class HH extends Dog3 {public static $height;//靜態(tài)對(duì)象,屬于類static function Gao()//靜態(tài)方法 static寫前面 {echo "<br />";echo "這么高".self::$height;//靜態(tài)方法調(diào)用靜態(tài)成員 用self } }$dog= new HH("二毛","2","藏獒"); HH::$height = 10; echo "<br />"; echo HH::$height; HH::Gao();//const 定義常量,常量定義好了,不能修改 const A=9; ?> <?php //多態(tài) 父類的引用指向子類的實(shí)例 必須要有繼承 重載 class Ren {var $name;var $age;function eat(){echo "{$this->name}正在吃飯";}}class China extends Ren {function eat(){echo "{$this->name}正在用筷子吃飯";}}$ren = new China();$ren->name = "張三";$ren->eat(); ?> <br /> <?php class Ren1 {var $name;var $age;function eat(){echo "{$this->name}正在吃飯";}function __tostring(){echo "這是一個(gè)人類";}function __clone()//克隆方法 在克隆的時(shí)候會(huì)自動(dòng)執(zhí)行,目的是將克隆出來(lái)的對(duì)象進(jìn)行一些改變 {$this->name = "王五";} } $ren1 = new Ren1; $ren1->name="李四"; $rl=clone $ren1;//克隆$rl->eat();//自動(dòng)加載類 //第一種 include()函數(shù) 同一個(gè)目錄下echo "<br />"; include("Cat.php");//不在同一個(gè)目錄下,往下找 www/Cat.php 往上找../Cat.php$cat= new Cat("喵喵咪","180","機(jī)器貓");echo "<br />"; $cat->Jiu(); //第二種 require_once 'Cat.php'; //自動(dòng)加載類 function __autoload($classname) {require_once $classname.".php";//require_once $classname."_class.php";其他寫法 必須要有固定格式 } $cat1= new Cat("喵喵","180","機(jī)器貓");echo "<br />"; $cat1->name = "加菲貓"; $cat1->Jiu();?> </body>在頁(yè)面Cat中的代碼
<body> <?php class Cat {var $name;var $age;var $pinzhong;function __construct($n,$a,$p){$this->name = $n;$this->age = $a;$this->pinzhong = $p;}function Jiu(){echo "一群叫‘{$this->name}’年齡‘{$this->age}’品種為‘{$this->pinzhong}’的小貓?jiān)谡鹊厍?#34;;} } $cat= new Cat("喵喵","180","機(jī)器貓");$cat->Jiu();?> </body>結(jié)果:
筆記:
面向?qū)ο?#xff1a;
一:定義類
class Dog
{
var $name;
var $age;
var $pinzhong;
function Jiao()
{
echo "{$this->name}在叫";
}
}
二:實(shí)例化對(duì)象
$dog = new Dog();
調(diào)用對(duì)象的成員:
$dog->name = "旺財(cái)";
$dog->Jiao();
三:$this關(guān)鍵字
$this->name;this代表該對(duì)象,如果要在成員方法中調(diào)用成員變量,一定要使用$this找出該成員變量
四:構(gòu)造函數(shù):
//構(gòu)造函數(shù) 每個(gè)類都有
//1、在類的實(shí)例化的時(shí)候第一個(gè)執(zhí)行
//2、寫法特殊 和類名一樣,沒有返回類型 java寫法:public Dog(){}
function __construct($n,$a,$p)
{
$this->name = $n;
$this->age = $a;
$this->pinzhong = $p;
}
$dog= new Dog("旺財(cái)","10","哈士奇");
五:析構(gòu)函數(shù):銷毀對(duì)象的時(shí)候執(zhí)行函數(shù) 不能有參數(shù)(了解)
function __destruct()
{
echo "拜拜";
}
六:封裝:
將類里面的成員變量加一個(gè)private修飾符變成私有的,目的是為了保護(hù)類里面的成員不被外界隨意訪問(wèn),從而確保類的安全性。如果將變量設(shè)置為私有,如何去訪問(wèn):
1.自己寫函數(shù)get函數(shù)set函數(shù),然后來(lái)對(duì)變量賦值和取值
2.用系統(tǒng)自帶的__get()函數(shù)和__set()函數(shù)來(lái)實(shí)現(xiàn)類里面的變量賦值取值(兩條下劃線)
function __set($name,$value)
{
$this->$name = $value;
}
function __get($name)
{
return $this->$name;
}
七:繼承
繼承一般是單繼承:一個(gè)兒子只能有一個(gè)父親
子類可以繼承父類的所有成員
子類可以對(duì)父類的成員方法進(jìn)行重寫:(函數(shù)名一樣),如果要在子類方法中調(diào)用父類的方法,用parent::Jiao();
function Jiao()
{
parent::Jiao();
echo "hello";
}
final關(guān)鍵字可以定義該類為最終類,不可被繼承
靜態(tài):
關(guān)鍵字:static ,如果成員聲明了為靜態(tài)的,那么該成員是屬于該類的,不是屬于對(duì)象的
如何調(diào)用靜態(tài)的成員:
HaShiQi::$height = 10;
HaShiQi::Gao();
用類名加雙冒號(hào)調(diào)用類的靜態(tài)成員
八、多態(tài):
條件:必須要繼承,父類的引用指向子類實(shí)例,重寫函數(shù)
function __tostring()
{
echo "這是一個(gè)人類";
}
tostring方法,在輸出對(duì)象的時(shí)候可以顯示該方法中的信息
$r1 = clone $ren;克隆對(duì)象
function __clone()
{
$this->name = "李四";
}
在克隆的時(shí)候會(huì)自動(dòng)執(zhí)行,該函數(shù)的目的就是將克隆出來(lái)的對(duì)象進(jìn)行一些改變
九、在頁(yè)面上引用類:
1.include來(lái)引用
include("../china.php");
2.require_once請(qǐng)求頁(yè)面
require_once "../China.php";
轉(zhuǎn)載于:https://www.cnblogs.com/Chenshuai7/p/5157811.html
總結(jié)
- 上一篇: ASP.NET中application对
- 下一篇: ThinkPHP分页实例