标签:
一、封装性(使用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判断的时候被自动调用
参数:1 属性的名字
在方法体中 通过判断$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一个私有属性的时候会被自动调用
参数 1 属性名
在方法体中 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();
//输出:我是父类我是子类
标签:
原文地址:http://www.cnblogs.com/youy/p/4988612.html