糯米文學吧

位置:首頁 > 計算機 > php語言

PHP面向對象三大特點學習

php語言3.13W

PHP面向對象三大特點學習 學習目標:充分理解抽象、封裝、繼承、多態。跟隨小編一起去了解下!

PHP面向對象三大特點學習

面象對向的三大特點:封裝性、繼承性、多態性 首先簡單理解一下抽象:

我們在前面定義一個類的時候,實際上就是把一類事物共有的屬性和行為提取出來,形成一個物理模型(模版),這種研究問題的方法稱為抽象

  一、封裝性

封裝就是把抽取出來的數據和對數據的操作封裝在一起,數據被保護在內部,程序的其他部分只有被授權的操作(方法)才能對數據進行操作。

php提供了三種訪問控制修飾符

public 表示全局,本類內部,類外部,子類都可以訪問

protected 表示受保護的,只有本類或子類可以訪問

private 表示私有的,只有本類內部可以訪問

以上三種修飾符既可以修飾方法也可以修飾屬性(變量),方法如果沒有訪問修飾符則默認是public,成員屬性必須指定訪問修飾符,在PHP4中也有這種寫法 var $name,表示公開屬性,不推薦這種寫法

例:

複製代碼 代碼如下:

<?php

class Person{

public $name;

protected $age;

private $salary;

function __construct($name,$age,$salary){

$this->name=$name;

$this->age=$age;

$this->salary=$salary;

}

public function showinfo(){

//這表示三個修飾符都可以在本類內部使用

echo $this->name."||".$this->age."||".$this->salary;

}

}

$p1=new Person('張三',20,3000);

//這裏屬於類外部,那麼如果用下面的方法訪問age和salary都會報錯

// echo $p1->age; echo$p1->salary;

?>

那麼現在就想在外部訪問protected和private的元素和方法該怎麼辦? 通常做法是通過public函數去訪問這些變量 格式:

public function setxxxx($val){

$this->xxxx=$val;

}

public function getxxxx(){

return $this->xxxx;

}

這裏帶set和get只是為了識別方便,並非必要

如:

public function getsalary(){

return $this->salary; //擴展:這裏可以調用一些方法,如判斷用户名等,正確才給訪問

}

在外部就可以通過 echo $p1->getsalary();

如果要訪問 protected和private也可以使用以下方法,但不推薦使用,只要瞭解即可

__set() 和 __get()

__set()對protected或private屬性進行賦值操作

__set($name,$val);

__get()獲取 protected 或 private的.值

__get($name);

如:

複製代碼 代碼如下:

<?php

class testa{

protected $name;

//使用__set()來管理所有屬性

public function __set($pro_name,$pro_val){

//上面$pro_name和$pro_val可自定義

//下面$this->pro_name為既定,不可更改

$this->pro_name=$pro_val;

}

//使用__get()來獲取所有屬性值

public function __get($pro_name){

if(isset($pro_name)){

return $this->pro_name;

} else {

return null;

}

}

}

$n1=new testa();

//正常情況,類外部是不能訪問protected屬性的,但是用了上面的方法就可以對它們進行操作

$n1->name='小三';

echo $n1->name;

?>

//以上代碼看懂就行,不推薦使用

  二、繼承性

先看一個例子:

複製代碼 代碼如下:

<?php

class Pupil{

public $name;

protected $age;

public function getinfo(){

echo $this->name.'||'.$this->age;

}

public function testing(){

echo 'this is pupil';

}

}

class Graduate{