博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
10分钟学会php面相对象基础(Ⅱ)
阅读量:7014 次
发布时间:2019-06-28

本文共 2101 字,大约阅读时间需要 7 分钟。

__set(),__get(),__isset(),__unset()四个方法的应用

预定义了两个函数”__get()”和”__set()”来获取和赋值其属性,以及检查属性的”__isset()”和删除属性的方法”__unset()”;

不过,get和set都需要想 construct、destruct一样,手动加入到方法中,才能使用;

如 function __get($name){

if(isset($this->name)){

return $this->name;

}else{

return null;

}

}

function __set($name,$value){

$this->name = $value;

}

此后,就可以在对象以外,直接赋值和取值;

如  echo $a->name; 这实际上就是在使用get;

 

“unset()”这个函数的作用是删除指定的变量且传回true,参数为要删除的变量;

"isset()"是测定变量是否设定用的函数,传入一个变量作为参数,如果传入的变量存在则传回true,否则传回false。

一旦在类内部描述了
private 
function 
__isset[__unset](
$nm
)
{
    
echo 
"当在类外部使用isset()函数测定私有成员$nm时,自动调用<br />"
;
 
    
return 
isset(
$this
->
$nm
);
}
就可以在类以外,判断属性有没有被定义 isset($run);
 
前面讲了OOP三特性之一
封装
 
现在说三大特效之二
继承
集成简单来讲,就是预先定义了一个类,叫衬衫,可能包含了 布料、肩宽、大身长等几个属性,清洗、穿等几个方法;然后有一个新的类, 叫时装衬衫,可能会多几个类,如辅料、印花等。我们可以看到,在衬衫的基础上,扩展出了时装衬衫,通过继承机制,可以利用已有的数据类型来定义新的数据类型。
C++中提供多继承,但java和php中提供单集成,即一个子类只能继承一个父类;
 

$class student{

var $school;

var $age;

private $grades;

public function study(){...}

} 

 这是一个学生类,现在根据小中高大等,我们派生出更多类;
$class h
ighSchool extend student{
  public function FallInLove($girl){
  ...
  }
}

在继承的基础上,添加了一些新的方法;

重载:

PHP里面没有方法重载 ,不能重载也就是在你的项目中不能定义相同方法名的方法。

那么在php里的重载怎么进行,可以通过继承之后,重新定义方法。目的是,比如上没提到的衬衫,可能一个方法输出袖子的长度和几个纽扣。但是子类中,可能有新的属性需要通过类似的方式来输出。

 

但这时候是简单的情景,如果父类中的方法你并不可见,或者可见,但是几百行代码,怎么办。

这是有就可以使用 parent:: 用法如下

例如父类中是这样的

$class student{

  var $school;

  public function __construct($school){

    $this->school = $school;

  }

  private function study(){

    echo $school;

  }

}

子类,新增了谈恋爱方法、女朋友属性

$class highSchoolStudent extend student(){

  var $girlFriend;

  public function __construct($school,$grilFriend){

    parent::__construct($school);

    $this->girlFriend = $girlFriend;

  }

  private function study(){

    parent::study();

    //add sth.

    echo $girlFriend;

  }

}

 

前面已经用到了很多次访问类型,具体为public (公有的、默认的),protected (受保护的)和private (私有的)三种。

  private protected public
同一个类里 V V V
子类里 X V V
所有外部成员 X X V

在子类覆盖父类的方法时也要注意一点,子类中方法的访问权限一定不能低于父类被覆盖方法的访问权限,也就是一定要高于或等于父类方法的访问权限。

例如,如果父类方法的访问权限是protected,那么子类中要覆盖的权限就要是protected和public,如果父类的方法是public那么子类中要覆盖的方法只能也是public,总之子类中的方法总是要高于或等于父类被覆盖方法的访问权限。

 

转载于:https://www.cnblogs.com/07byte/p/5823841.html

你可能感兴趣的文章
清华大学MBA在职班第一学年第二学期课表
查看>>
PHP缓存技术
查看>>
Webix合集
查看>>
Mysql主从复制及读写分离的实现
查看>>
哈希表的静态,动态,以及key/value形式
查看>>
基于memcached-session-manager的tomcat session共享集群
查看>>
关于Apache的一些配置
查看>>
清除Windows Server Backup 备份副本
查看>>
常见Sqlite管理工具
查看>>
MySQL中创建、删除表和库,添加、删除记录
查看>>
Cloudflare能检测HTTPS并拦截MITMEngine
查看>>
android文件系统system-ramdisk-userdata三者之间的关系
查看>>
Collection has neither generic type or OneToMany.targetEntity()
查看>>
使用webmagic抓取页面并保存为wordpress文件
查看>>
前嗅ForeSpider教程:验证码设置
查看>>
搭建LAMP环境PHP无法解析问题
查看>>
(翻译)Quartz官方教程——第十课:配置,资源使用和SchedulerFactory
查看>>
cobbler无人值守安装CentOS7
查看>>
0-1背包问题理解
查看>>
人眼定位识别
查看>>