Home >php教程 >php手册 >php面向对象编程程序设计

php面向对象编程程序设计

WBOY
WBOYOriginal
2016-05-25 16:56:481233browse

/*  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.phprm.com"; 
   $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') ; 

 

本文链接:

收藏随意^^请保留教程地址.

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn