程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> php面向對象編程的封裝性

php面向對象編程的封裝性

編輯:PHP綜合

封裝的概念

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

例:在人這個類中,人的年齡和工資是隱私的

<?php
class Person{
public $name;
private $age;
private $salary;
function __construct($name,$age,$salary){
$this->name=$name;
$this->age=$name;
$this->salary=$salary;
}
}
//創建一個人
$p1=new Person("張三",30,1000);
//訪問張三的工資
//echo $p1->salary; //會報錯,不能訪問private中的屬性
echo $p1->name;
?>

封裝的訪問修飾符

php提供三種訪問控制修飾符號來控制方法和變量(屬性)的訪問權限

public 表示全局,類的外部、內部和子類都可以訪問。

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

private 表示私有的,只有本類內部可以使用;

這三個修飾符號可以修飾變量和方法。

1) 如果一個方法沒有訪問修飾符,默認是public的。

2)屬性(變量)必須指定訪問修飾符。

3)方法之間可以相互調用,但需要$->this引用。

如下表:

  public protected private 全局 √ X X 繼承類 √ √ X 本類 √ √ √

例:

<?php
class Person{
public $name;
protected $age;
private $salary;
function __construct($name,$age,$salary){
$this->name=$name;
$this->age=$name;
$this->salary=$salary;
}
function showInfo(){
//在本類中可以使用public,protected和private類型的值
echo $this->name."||".$this->age."||".$this->salary."<br />";
}
}
//創建一個人
$p1=new Person("張三",30,1000);
//訪問張三的工資
//echo $p1->salary; //會報錯,不能訪問private中的屬性
echo $p1->name."<br />";
$p1->showInfo();
//echo $p1->age;//報錯,因為$age是protected的,類外不能訪問
//echo $p1->salary; //報錯,因為$salary是private的,類外不能訪問
?>

如何訪問protected和private修飾的成員變量?通常是在類中通過public的函數去訪問這些變量。也可以使用php提供的方法

__set();和__get();這兩種方法也被稱為魔術方法。注意:目前已經不推薦使用魔術方法了

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

__set($name,$value);

__get()獲取protected或private屬性的值,例:

__get($name);

例:

<?php
class A{
private $n1;
private $n2;
private $n3;
//使用__set方法來管理所有私有屬性
public function __set($pro_name,$pro_val){
$this->pro_name=$pro_val;
}
//使用__get方法來管理所有私有屬性的值
public function __get($pro_name){
if(isset($pro_name)){
return $this->pro_name;
}else{
return null;
}
}
}
$a1=new A();
$a1->n1="www.bianceng.cn";
echo $a1->n1; //輸出www.bianceng.cn
?>

通常是在類中通過public的函數去訪問protected和private修飾的成員變量

例:

<?php
class Person{
public $name;
protected $age;
private $salary;
function __construct($name,$age,$salary){
$this->name=$name;
$this->age=$name;
$this->salary=$salary;
}
function showInfo(){
//在本類中可以使用public,protected和private類型的值
echo $this->name."||".$this->age."||".$this->salary."<br />";
}
//我們可以通過public的函數來訪問protected或private的變量
function getSalary($user,$pass){
if($user=="www.bianceng.cn" && $pass==123){
return $this->salary;
}else{
echo "你沒有查看工資的權限";
}
}
}
//創建一個人
$p1=new Person("張三",30,1000);
//訪問張三的工資
//echo $p1->salary; //會報錯,不能訪問private中的屬性
echo $p1->name."<br />";
$p1->showInfo();
//echo $p1->age;//報錯,因為$age是protected的,類外不能訪問
//echo $p1->salary; //報錯,因為$salary是private的,類外不能訪問
echo $p1->getSalary("www.bianceng.cn",123);
?>

例:修改和查看上例中被protected的age

<?php
class Person{
public $name;
protected $age;
private $salary;
function __construct($name,$age,$salary){
$this->name=$name;
$this->age=$name;
$this->salary=$salary;
}
function showInfo(){
//在本類中可以使用public,protected和private類型的值
echo $this->name."||".$this->age."||".$this->salary."<br />";
}
//我們可以通過public的方法來訪問protected或private的變量
function getSalary($user,$pass){
if($user=="www.bianceng.cn" && $pass==123){
return $this->salary;
}else{
echo "你沒有查看工資的權限";
}
}
//修改年齡
public function setAge($age){
if($age>=1 && $age<=120){
$this->age=$age;
}else{
echo "<br />年齡范圍不對!<br />";
}
}
//查看年齡
public function getAge(){
return $this->age;
}
}
//創建一個人
$p1=new Person("張三",30,1000);
//訪問張三的工資
//echo $p1->salary; //會報錯,不能訪問private中的屬性
echo $p1->name."<br />";
$p1->showInfo();
//echo $p1->age;//報錯,因為$age是protected的,類外不能訪問
//echo $p1->salary; //報錯,因為$salary是private的,類外不能訪問
echo $p1->getSalary("www.bianceng.cn",1203);
//修改年齡
$p1->setAge(75);
echo "<br />".$p1->getAge();
?>

URL:http://www.bianceng.cn/webkf/PHP/201610/50461.htm

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved