码迷,mamicode.com
首页 > Web开发 > 详细

php面向对象特性(一)

时间:2018-01-07 15:56:59      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:strong   不能   font   col   变量   代码   name   成员   put   

OOP封装

面向对象的三个主要特性是封装继承多态

OOP的封装

隐藏对象的字段和实现细节,仅对外公开接口,控制在程序中字段的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。
字段的作用域:
1.    public 公共的 (类外可以访问的)
2.    private 私有的 (类内可以访问)
3.    protected 受保护的(类内和子类可以访问,类外不可以访问)
什么是类内,就是创建类的花括号内的范围叫做类内,其他地方叫做类外。
创建使用了私有字段,这样外部就无法访问了

 示例

class Computer{
// 类的字段(成员)
//private 是私有化,即对字段进行封装的操作,类外无法访问,取值和赋值都不能操作
private $_name = ‘联想‘;
private $_mode = ‘I7‘;
}
$computer1 = new Computer();
//此时无法访问
echo $computer1->_name;
#通过公共方法作为入口,访问私有字段,而必须使用$this关键字。
class Computer{
//类的字段(成员)
private $_name="联想";
//这时采用一个对外的公共方法来访问私有字段
//因为私有字段只能在类内访问,而对外的公共方法是类内的
//更而公共方法又是公共的,所以类外又可访问。
public function _run(){
//字段在类内调用的时候,必须是类->字段,而$_name只是一个普通变量而已。
//字段在类外调用的方法是对象->字段,而类内就必须使用Computer->_name
//但在本类中,可以用一个关键字来代替Computer,那就是$this
echo $this->_name;
}
}
$computer1 = new Computer();
echo $computer1->_run();

 

 对私有字段的赋值和取值

可以设计两个公共方法,一个方法是setName(),用于赋值,一个方法是getName(),用于取值。

class Computer{
// 类的字段(成员)
    private $_name = "联想";
// 构造方法
    public function __construct()
    {
        echo "<meta charset=utf8>";
    }
// 赋值
public function setName($name){
//这里的$_name 只是一个变量而已,参数而已
//this->_name才是类的字段
        $this->_name=$name;
}
// 取值
    public function getName(){
        return $this->_name;
    }
}
$computer1 = new Computer();
$computer1->setName("dell");
echo $computer1->getName();

 

 拦截器

如果有十个字段那么就必须要有二十个方法才能够赋值和取值,php内置了两个方法(拦截器)专门用于取值和赋值:__set(),__get()

class Computer{
    private $_name ;
    private  $_cpu;
    private  $_model;
    public function __construct()
    {
        echo "<meta charset=utf8>";
    }
    //当类外的对象直接调用私有字段时,会跟着去检查拦截器,
    //如果直接对$_name进行赋值,那么 __set()方法就会拦截住,就不会报错了

    //采用拦截器赋值和取值
    //赋值
    public function __set($name, $value)
    {
        //如果$name = ‘_name‘,如果$value="联想"
        // $this->_name=‘联想‘
        //如果$name=‘_cpu‘,如果$value="4核"
        //$this->_cpu =‘4核‘
        //如果$name=‘_model‘,如果$value=‘i7‘
        //$this->_model=‘i7‘
        $this->$name = $value;
    }
    //取值
    public function __get($name)
    {
        //如果$key = ‘_name‘ 那么$this->_name
        //如果$key = ‘_cpu‘ 那么$this->_cpu
        //如果$key = ‘_model‘ 那么$this->_model
        return $this->$name;
    }
}
$computer1 = new Computer();
$computer1->_name = "联想";
$computer1->_model = "i7";
$computer1->_cpu = "4核";
echo $computer1->_name;
echo $computer1->_model;
echo $computer1->_cpu;

提示:将成员方法私有化,也可以在类外调用,这是为什么呢?

 

php面向对象特性(一)

标签:strong   不能   font   col   变量   代码   name   成员   put   

原文地址:https://www.cnblogs.com/anyux/p/8227945.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!