您的位置:首页 > 编程语言 > PHP开发

PHP面向对象特性-封装

2017-07-23 16:59 381 查看
封装

1、字段的作用域

public 公共的(类外可以访问)

private 私有的(类内可以访问)

protected 受保护的(类内和子类可以访问,类外不可以)

2、创建使用私有的字段,这样外部就无法访问

class Computer{
private $_name = '联想';
private $_model = 'LX';
//通过公共方法来访问私有字段
function run(){
echo $this -> _name;
}
}


3、属性操作-私有字段的赋值与取值

class Computer{
private $_name;
//必须写一个对内入口,对私有对象进行赋值
public function setName($_name){
$this->_name = $_name;
}
//必须写一个对外入口,才可以取到
public function getName(){
return $this->_name;
}
}
$computer = new Computer();
$computer -> setName('dell');
echo $computer -> getName();


4、拦截器

当类外的对象直接调用私有字段时,会跟着去检查是否有拦截器

如果直接对$_name进行赋值,那么__set方法就会拦截住,就不会报错了

class Computer{
private $_name;
private $_model;
private $_cpu;
//采用拦截器进行赋值和取值
//赋值
public function __set($_key,$_value){
$this->$_key = $_value;
}
//取值
public function __get($_key){
return $this->$_key;
}
}
$computer = new Computer();
$computer->_name = '联想';
$computer->_cpu = 'i7';
$computer->_model = '四核';
echo $computer->_name;
echo $computer->_cpu;
echo $computer->_model;


注意:__set() __get()方法被私有时,还是可以执行

因为现在的指针已经在类内了

5、常量

在类中定义常量,用来表示不会改变的值,对于该类实例化的任何对象来说,常量值在对象的整个生命周期中都不变。

class Computer{
const NAME = 'DELL';
}
echo Computer::NAME;


6、静态类成员

eg1:非静态,输出结果:123 123

class Computer{
public  $_count=0;

public function __add(){
$this->_count++;
}
}
$computer1 = new Computer();
$computer1->__add();
echo $computer1->_count;
$computer1->__add();
echo $computer1->_count;
$computer1->__add();
echo $computer1->_count;
$computer2 = new Computer();
$computer2->__add();
echo $computer1->_count;
$computer2->__add();
echo $computer1->_count;
$computer2->__add();
echo $computer1->_count;


eg2:静态成员 输出结果 123 456

class Computer{
public static $_count=0;

public function __add(){
self::$_count++;
}
}
$computer1 = new Computer();
$computer1->__add();
echo Computer::$_count;
$computer1->__add();
echo Computer::$_count;
$computer1->__add();
echo Computer::$_count;
echo "<br>";
$computer2 = new Computer();
$computer2->__add();
echo Computer::$_count;
$computer2->__add();
echo Computer::$_count;
$computer2->__add();
echo Computer::$_count;


7、静态方法

class Computer{
public static $_count = 0;
public static function __run(){
self::$_count++;
}
}
Computer::__run();
Computer::__run();
Computer::__run();
echo Computer:: $_count;


8、instanceof 关键字

使用它可以确定一个对象是类的实例,累得子类,还是实现了某个特定的接口,并进行相应的操作。

class Computer{

}
$computer = new Computer();
echo ($computer instanceof Computer);
//computer 是 Computer的实例。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: