php物件導向編程程式設計

來源:互聯網
上載者:User

<?php教程
/*  PHP物件導向的程式設計
 *
 *  PHP5
 *
 *  數組和對象:都屬於PHP的複合類型(一個變數可以儲存多個單元)
 *
 *  對象比數組更強大,不僅可以儲存多個資料,還可以將函數存在對象中
 *
 *  對象的三大特性:封裝、繼承、多態
 *
 *  物件導向編程(oop) //符合軟體工程中的 重用性 靈活性 擴充性
 *
 *  物件導向和面向過程之間的區別
 * 
 * 最小的單位:函數  //面向過程
 * 最小的單位:對象  //物件導向
 *
 *  什麼是對象
近來,新浪管理層開始套現,公開訊息披露,當年的MBO使得管理層意氣風發地成為新浪第一大股東,可到今天,他們已經成為了第二大股東。股權比例相距倒是不大:和第一大股東FMR9.24%的比例只有0.1%的差距。但新浪管理層手上有約定出售股權的協議,如果算上這部分未來可能會拋售的股權,管理層就只剩下5.74%了。新浪的確有可能再次成為一個“無主的公司”。

  這就是新浪作為一家公司,未來的麻煩:盈利模型不清晰,無主的可能性又開始展現。
 * 對象是一個實體
 * 對象:
 *  成員屬性==變數//定義對象的外觀和狀態
 *  成員方法==函數//定義對象的功能
 *
 *  什麼是類
 *   分類、類型、自訂類型
 *   
 *   在類中定義這個類型的屬性和方法
 *
 *  類和對象之間的一個關係
 *
 *    聲明類-->執行個體化對象(建立對象)-->使用對象
 *
 *
 *  最難得是如何設計出物件導向的程式,而不是物件導向的文法。
 *
 */

?>

原來的成員:
var $name;   //聲明人的姓名
var $sex;    //聲明人的性別
var $age;    //聲明人的年齡
function run(){…….}
改成封裝的形式:
private $name;          //把人的姓名使用private關鍵字進行封裝
private $sex;      //把人的性別使用private關鍵字進行封裝
private $age;      //把人的年齡使用private關鍵字進行封裝

  
private function run(){……}  //把人的走路方法使用private關鍵字進行封裝
注意:只要是成員屬性前面有其它的關鍵字就要去掉原有的關鍵字“var”。
通過private就可以把人的成員(成員屬性和成員方法)封裝上了。封裝上的成員就不能被類外面直接存取了,只有對象內部自己可以訪問;下面的代碼會產生錯誤:
class Person
{
//下面是人的成員屬性
private $name; //人的名子,被private封裝上了
private $sex; //人的性別, 被private封裝上了
private $age; //人的年齡, 被private封裝上了
//這個人可以說話的方法
function say()
{
echo "我的名子叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age."<br>";
}
//這個人可以走路的方法, 被private封裝上了
private function run()
{
echo "這個人在走路";
}
}
//執行個體化一個人的執行個體對象
$p1=new Person();
//試圖去給私人的屬性賦值, 結果會發生錯誤
$p1->name="張三";
$p1->sex="男";
$p1->age=20;
//試圖去列印私人的屬性, 結果會發生錯誤
echo $p1->name.”<br>”;
echo $p1->sex.”<br>”;
echo $p1->age.”<br>”
//試圖去列印私人的成員方法, 結果會發生錯誤
$p1->run();
輸出結果為:
Fatal error: Cannot access private property Person::$name
Fatal error: Cannot access private property Person::$sex
Fatal error: Cannot access private property Person::$age
Fatal error: Cannot access private property Person::$name
Fatal error: Call to private method Person::run() from context ''

從上面的執行個體可以看到, 私人的成員是不能被外部存取的, 因為私人成員只能在本對象內部自己訪問,比如,$p1這個對象自己想把他的私人屬性說出去,在say()這個方法裡面訪問了私人屬性,這樣是可以。(沒有加任何存取控制,預設的是public的,任何地方都可以訪問)
//這個人可以說話的方法, 說出自己的私人屬性,在這裡也可以訪問私人方法

function say()
{
echo "我的名子叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age."<br>";
//在這裡也可以訪問私人方法
//$this->run();
}

因為成員方法say()是公有的, 所以我們在類的外部調用say()方法是可以的,改變上面的代碼;

 

 class Person
{
//下面是人的成員屬性
private $name;   //人的名子,被private封裝上了
private $sex;   //人的性別, 被private封裝上了
private $age;   //人的年齡, 被private封裝上了
//定義一個構造方法參數為私人的屬性姓名$name、性別$sex和年齡$age進行賦值
function __construct($name, $sex, $age)
{
//通過構造方法傳進來的$name給私人成員屬性$this->name賦初使值
$this->name=$name;
//通過構造方法傳進來的$sex給私人成員屬性$this->sex賦初使值
$this->sex=$sex;
//通過構造方法傳進來的$age給私人成員屬性$this->age賦初使值
$this->age=$age;
}
//這個人可以說話的方法, 說出自己的私人屬性,在這裡也可以訪問私人方法
function say()
{
echo "我的名子叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age."<br>";
}
}
//通過構造方法建立3個對象$p1、p2、$p3,分別傳入三個不同的實參為姓名、性別和年齡
$p1=new Person(“張三”,”男”, 20);
$p2=new Person(“李四”,”女”, 30);
$p3=new Person(“王五”,”男”, 40);
//下面訪問$p1對象中的說話方法
$p1->say();
//下面訪問$p2對象中的說話方法
$p2->say();
//下面訪問$p3對象中的說話方法

  $p3->say();
輸出結果為:
我的名子叫:張三 性別:男 我的年齡是:20
我的名子叫:李四 性別:女 我的年齡是:30
我的名子叫:王五 性別:男 我的年齡是:40

 

<?php
class  user{
 private $shell ;           //使用者身份  這裡是包含名字 和 許可權的二維數組
 private $ob;             //模組對象  例如 財務模組 caiwu
   function __construct($shell){
    $this->shell =  $shell;
   }
   function mannger($ob){
   $this->ob = new  $ob($this->shell);
   }
   function qianguize(){
    $this->shell[name] != '小蜜'? die('!') :'';
    $this->ob = new  mklove($this->shell);
   }
}
class caiwu{
 function __construct($shell){
    if(!in_array('caiwu',$shell[quanxian])) {
      echo($shell[name]."你不可以管理財務哦~!<br/>");
    }else{
  echo $shell[name]."你可以管理財務<br/>";
    }
 }
}
class mklove{
 function __construct (&$shell){
    if(!in_array('mklove',$shell[quanxian])) die('你不可以');
   echo "www.111cn.net";
   $shell[quanxian][]='caiwu';
 }
}
 
/*
 其中user 是使用者類
 caiwu  !
*/
$shell  = array(name=> 'fs', quanxian=>array('caiwu','xingzheng','cailiao','mklove'));   
$shell0 = array(name=> 'f', quanxian=>array('cailiao','mklove'))  ;  

 

$jingli = new user($shell) ;                  
$xiaomi = new user($shell0) ;           
 
 
echo "<h4>他們分別試著去管理財務</h4><br/>";
 $jingli->mannger('caiwu') ;           
 $xiaomi->mannger('caiwu') ;          
 

echo "<h4>潛規則後的結果</h4><br/>";
  $xiaomi->qianguize();             
  $xiaomi->mannger('caiwu') ;
?>

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.