一步一步學習PHP(6) 物件導向

來源:互聯網
上載者:User

但是我們知道,物件導向有三大特徵:繼承,多態和封裝。

1. 繼承

我們繼續上一節中的例子,在PHP中,繼承和Java是一樣的,都使用extends關鍵字。 複製代碼 代碼如下:class People
{
private $name;
public function GetName()
{
return $this->name;
}
public function SetName($name)
{
$this->name=$name;
}
}
class Student extends People
{
private $grade;
public function SayHello()
{
echo("Good Morning,".parent::GetName());
}
}

在這裡,我們需要主要的還有我們訪問父類在C# 中用base,在Java中用super,但是在PHP中,我們用parent關鍵字。

如果我們要訪問自身的方法,那麼可以用this,也可以用self。 複製代碼 代碼如下:class Student extends People
{
public function GetName()
{
return "kym";
}
private $grade;
public function SayHello()
{
echo("Good Morning,".self::GetName());
//echo("Good Morning,".$this->GetName());
}
}

2. 抽象類別

提到繼承,就不得不說抽象類別。 複製代碼 代碼如下:<?php
abstract class People
{
private $name;
public function GetName()
{
return $this->name;
}
public function SetName($name)
{
$this->name=$name;
}
abstract function SayHello();
}
class Student extends People
{
public function SayHello()
{
echo("Good Morning,".parent::GetName());
}
}
$s=new Student();
$s->SetName("kym");
$s->SayHello();
?>

3. 介面

接下來就是介面: 複製代碼 代碼如下:<?php
abstract class People
{
private $name;
public function GetName()
{
return $this->name;
}
public function SetName($name)
{
$this->name=$name;
}
abstract function SayHello();
}
interface IRun
{
function Run();
}
class Student extends People implements IRun
{
public function SayHello()
{
echo("Good Morning,".parent::GetName());
}
public function Run()
{
echo("兩條腿跑");
}
}
$s=new Student();
$s->SetName("kym");
$s->SayHello();
$s->Run();
?>

都沒什麼好說的,跟Java一模一樣。

4. 構造方法

一直忘了說構造方法,其實也就是一段同樣的代碼: 複製代碼 代碼如下:<?php
class Person
{
private $name;
private $age;
public function Person($name,$age)
{
$this->name=$name;
$this->age=$age;
}
public function SayHello()
{
echo("Hello,My name is ".$this->name.".I'm ".$this->age);
}
}
$p=new Person("kym",22);
$p->SayHello();
?>

我們在面試中也許經常會遇到一種變態的題型,就是若干個類之間的關係,然後建構函式呀什麼的調來調去。但是,在PHP中就不會遇到這樣的情況了,因為在PHP中並不支援建構函式鏈,也就是說,在你初始化子類的時候,他不會自動去調用父類的構造方法。 複製代碼 代碼如下:<?php
class Person
{
private $name;
private $age;
public function Person($name,$age)
{
$this->name=$name;
$this->age=$age;
}
public function SayHello()
{
echo("Hello,My name is ".$this->name.".I'm ".$this->age);
}
}
class Student extends Person
{
private $score;
public function Student($name,$age,$score)
{
$this->Person($name,$age);
$this->score=$score;
}
public function Introduce()
{
parent::SayHello();
echo(".In this exam,I got ".$this->score);
}
}

$s=new Student("kym",22,120);
$s->Introduce();
?>

5. 解構函式

解構函式和C#和C++中不同,在PHP中,解構函式的名稱是__destructor()。 複製代碼 代碼如下:class Student extends Person
{
private $score;
public function Student($name,$age,$score)
{
$this->Person($name,$age);
$this->score=$score;
}
public function Introduce()
{
parent::SayHello();
echo(".In this exam,I got ".$this->score);
}
function __destruct()
{
echo("我要被卸載了");
}
}

6. 多態

由於預設參數的存在,以及PHP的弱類型,使得編譯時間多態(也就是由於參數個數以及類型不同而造成的多態)無法實現,但是運行時多態在上文中已有提及。不再贅述。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.