一步一步學(xué)習(xí)PHP(6) 面向?qū)ο?/h1>
更新時(shí)間:2010年02月16日 11:51:52 作者:
在上篇文章中,我們主要說了如何來創(chuàng)建一個(gè)類和對象,以及其中一些基本的用法。
但是我們知道,面向?qū)ο笥腥筇卣鳎豪^承,多態(tài)和封裝。
1. 繼承
我們繼續(xù)上一節(jié)中的例子,在PHP中,繼承和Java是一樣的,都使用extends關(guān)鍵字。
復(fù)制代碼 代碼如下:
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關(guān)鍵字。
如果我們要訪問自身的方法,那么可以用this,也可以用self。
復(fù)制代碼 代碼如下:
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. 抽象類
提到繼承,就不得不說抽象類。
復(fù)制代碼 代碼如下:
<?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. 接口
接下來就是接口:
復(fù)制代碼 代碼如下:
<?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. 構(gòu)造方法
一直忘了說構(gòu)造方法,其實(shí)也就是一段同樣的代碼:
復(fù)制代碼 代碼如下:
<?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();
?>
我們在面試中也許經(jīng)常會遇到一種變態(tài)的題型,就是若干個(gè)類之間的關(guān)系,然后構(gòu)造函數(shù)呀什么的調(diào)來調(diào)去。但是,在PHP中就不會遇到這樣的情況了,因?yàn)樵赑HP中并不支持構(gòu)造函數(shù)鏈,也就是說,在你初始化子類的時(shí)候,他不會自動(dòng)去調(diào)用父類的構(gòu)造方法。
復(fù)制代碼 代碼如下:
<?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. 析構(gòu)函數(shù)
析構(gòu)函數(shù)和C#和C++中不同,在PHP中,析構(gòu)函數(shù)的名稱是__destructor()。
復(fù)制代碼 代碼如下:
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. 多態(tài)
由于默認(rèn)參數(shù)的存在,以及PHP的弱類型,使得編譯時(shí)多態(tài)(也就是由于參數(shù)個(gè)數(shù)以及類型不同而造成的多態(tài))無法實(shí)現(xiàn),但是運(yùn)行時(shí)多態(tài)在上文中已有提及。不再贅述。
相關(guān)文章
-
很實(shí)用的一個(gè)完整email發(fā)送程序
這篇文章主要介紹了很實(shí)用的一個(gè)完整email發(fā)送程序 2006-10-10
-
PHP PDOStatement::columnCount講解
今天小編就為大家分享一篇關(guān)于PHP PDOStatement::columnCount講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧 2019-01-01
-
php addslashes 函數(shù)詳細(xì)分析說明
PHP 中的 addslashes 函數(shù)
addslashes -- 字符串加入斜線。 2009-06-06
最新評論
1. 繼承
我們繼續(xù)上一節(jié)中的例子,在PHP中,繼承和Java是一樣的,都使用extends關(guān)鍵字。
復(fù)制代碼 代碼如下:
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關(guān)鍵字。
如果我們要訪問自身的方法,那么可以用this,也可以用self。
復(fù)制代碼 代碼如下:
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. 抽象類
提到繼承,就不得不說抽象類。
復(fù)制代碼 代碼如下:
<?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. 接口
接下來就是接口:
復(fù)制代碼 代碼如下:
<?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. 構(gòu)造方法
一直忘了說構(gòu)造方法,其實(shí)也就是一段同樣的代碼:
復(fù)制代碼 代碼如下:
<?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();
?>
我們在面試中也許經(jīng)常會遇到一種變態(tài)的題型,就是若干個(gè)類之間的關(guān)系,然后構(gòu)造函數(shù)呀什么的調(diào)來調(diào)去。但是,在PHP中就不會遇到這樣的情況了,因?yàn)樵赑HP中并不支持構(gòu)造函數(shù)鏈,也就是說,在你初始化子類的時(shí)候,他不會自動(dòng)去調(diào)用父類的構(gòu)造方法。
復(fù)制代碼 代碼如下:
<?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. 析構(gòu)函數(shù)
析構(gòu)函數(shù)和C#和C++中不同,在PHP中,析構(gòu)函數(shù)的名稱是__destructor()。
復(fù)制代碼 代碼如下:
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. 多態(tài)
由于默認(rèn)參數(shù)的存在,以及PHP的弱類型,使得編譯時(shí)多態(tài)(也就是由于參數(shù)個(gè)數(shù)以及類型不同而造成的多態(tài))無法實(shí)現(xiàn),但是運(yùn)行時(shí)多態(tài)在上文中已有提及。不再贅述。
相關(guān)文章
很實(shí)用的一個(gè)完整email發(fā)送程序
這篇文章主要介紹了很實(shí)用的一個(gè)完整email發(fā)送程序2006-10-10
PHP PDOStatement::columnCount講解
今天小編就為大家分享一篇關(guān)于PHP PDOStatement::columnCount講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-01-01
php addslashes 函數(shù)詳細(xì)分析說明
PHP 中的 addslashes 函數(shù) addslashes -- 字符串加入斜線。2009-06-06

