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

php面向对象-封装性

时间:2015-11-23 16:40:47      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:

一、封装性(使用private关键字修饰就实现了对成员的封装)

1、设置封装

例3-1

<?php

class Person{

private $name; //设置私有成员

function say(){

echo "我的姓名是:$this->name ";

}

}

 

$person = new Person("张三","",20);

$person -> name = "李四"; //无效,会报错

echo $person -> name; //无效,会报错

 

2、魔术方法

(1) __set 魔术方法

调用时机:在类的外部对私有成员属性赋值的时候会被自动调用

参数:2个 第一个参数是 属性名 第二个参数是 要赋的值

例:

<?php

class Person{

        private $name;

        function run(){

            echo "$this->name 在走路";

        }

        function __set($name,$value){

            $this->$name = $value;

        }

    }

 

    $person = new Person;

    $person -> name ="李四";  //自动执行  __set()方法

    $person -> run();

 

(2) __get 魔术方法

调用时机:在类的外部对私有成员属性取值的时候被自动调用

参数:1个 属性的名字

在函数体内 要return $this->属性名

例:

<?php   

class Person{

    private $name ="张三";

    private $sex ="";

    function __get($name){

        return $this->$name;

    }

}

$person = new Person;

echo $person -> getName("name");  //自动执行 __get()方法

echo $person -> sex;

 

(3) __isset 魔术方法

调用时机:在类的外部对私有成员属性进行isset判断的时候被自动调用

参数:属性的名字

在方法体中 通过判断$this->属性名是否配设置过 来返回真假值

例:

<?php

    class Person{

        private $name="梨园";

        private $age="100";

 

        function __isset($name){

            return isset($this->$name);

        }

    }

 

    $person = new Person;

    var_dump(isset($person->name));   //自动调用 __isset ()方法

 

(4) __unset 魔术方法

调用时机:在类的外部想unset一个私有属性的时候会被自动调用

参数 属性名

在方法体中 unset($this->属性)

例:

<?php

    class Person{

        private $name;

        private $sex;

        private $age;

 

        function say(){

            echo "我的名字是:$this->name 我的性别是:$this->sex 我的年龄是:$this->age ";

        }

 

        function __construct($name,$sex,$age){

            $this -> name = $name;

            $this -> sex = $sex;

            $this -> age = $age;

        }

 

        function __unset($name){

            unset($this -> $name);

        }

    }

    $person = new Person("张三","",20);

    $person -> say();

    unset($person -> sex);   //自动调用 __unset()方法

    echo "<br />";

    $person -> say();

 

3、继承

概念:

使用关键字 extends

父类:被继承的类 (基类)

子类:继承的类   (派生类)

继承的意思是子类拥有了父类的(除了私有的)所有属性和方法

原则:

如果子类中拥有和父类同名的成员方法,这种情况叫做 重写(覆写)

父类中私有属性或者私有方法不能被子类继承(子类不能使用父类的私有东西)

如果子类没有的会去找父类要,如果子类有就不去找父类要

如果成员方法在父类中调用,该方法可以使用私有成员属性

如果父类中的方法使用的属性在父类中是私有的,则使用父类的属性而不用子类的属性

如果在方法中使用一个未被声明的成员属性,系统会自动创建该属性,一样可以使用(就像变量赋值一样)

例:

<?php

//1.在成员方法中对一个未被定义的成员属性赋值,可以成功(成员属性默认公有的)

class Son{

function __construct($_n){

$this->name=$_n;

}

function say(){

echo $this->name;

}

}

$ztz=new Son(‘赵桐正‘);

$ztz->say();            //输出赵桐正

echo $ztz->name;        //输出赵桐正

 

//2.继承的一个原则是:儿子有用儿子的,儿子没有用老子的

class Father{

public $name=‘father‘;

}

class Son extends Father{

function say(){

echo $this->name;

}

}

$ztz=new Son;

$ztz->say();   //输出father

 

//3.如果父类的成员属性是私有的,子类不可以使用

class Father{

private $name=‘father‘;

}

class Son extends Father{

function say(){

echo $this->name;

}

}

$ztz=new Son;

$ztz->say();   //不能输出

 

//4.如果成员方法在父类中,父类的属性是公有的,子类的属性也是公有的,用子类的

class Father{

public $name=‘father‘;

function say(){

echo $this->name;

}

}

class Son extends Father{

public $name=‘son‘;

}

$ztz=new Son;

$ztz->say();   //输出son

 

 

//5.如果成员方法在父类中,父类的属性是私有的,用父类的

class Father{

private $name=‘father‘;

function say(){

echo $this->name;

}

}

class Son extends Father{

public $name=‘son‘;

}

$ztz=new Son;

$ztz->say();   //输出son

 

 

private

protected

public

同一个类中

类的子类中

 

所有的外部成员

 

 

4、访问类型控制性

 

 

 

 

 

 

 

在基层关系中有一个原则 叫做 3 2 1 原则 按照严谨度划分

 private    3

 protected  2

 public    1

 在子类重载父类的成员属性或者方法中,等级只能小于或者等于父类的等级

parent:调用父类中的方法

例:

<?php

class father{

function say(){

echo "我是父类!";

}

}

class Son extends Father{

function say(){

parent::say();

echo "我是子类";

}

}

$s=new Son;

$s->say();

//输出:我是父类我是子类

php面向对象-封装性

标签:

原文地址:http://www.cnblogs.com/youy/p/4988612.html

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