PHP类相关知识点实例总结


Posted in PHP onSeptember 28, 2016

本文实例总结了PHP类相关知识点。分享给大家供大家参考,具体如下:

最终类与最终方法

如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。

final class a{}
class a{
  final public function A(){}
}

抽象类与抽象方法

abstract class a {
  public abstract function func();
}
class A extends a{
  public function func(){}
}

① 一个类可以使用abstract声明为抽象类;抽象类是不能实例化的类,只用作其他类的父类。

abstract class name{}

② 一个方法可以使用abstract声明为抽象方法;抽象方法只需要声明方法头,不需要大括号部分的方法体。

abstract public function name($val);

③ 一个类中有抽象方法,则该类必须声明为抽象类。

④ 子类继承自一个抽象类,则子类不行实现父类中的所有抽象方法,除非子类也继续作为抽象类。

⑤ 子类实现抽象父类的方法时,访问控制符范围不能降低,且方法的参数也必须一致(重写)。

接口

接口可以看作是抽象类的更高层面的抽象,可以说是抽象类的特例

interface a{
  function func();
}
class A implements a {
  function func(){}
}

类:属性、类常量、方法

抽象类:属性、类常量、抽象方法

接口:接口常量、抽象方法

① 相比抽象类,接口可实现‘多继承'

class A implements a,b,c{}

② 一个接口只能继承一个接口

interface a extends b{}

③ 其中方法都是抽象方法不用abstract修饰,即下级类要么实现接口的方法(implements),要么也声明为抽象方法

重载技术

1. 属性重载:如果使用一个不存在的属性,就会调用类中预先定义好的某个方法以处理数据;

对于属性不用的应用场景,做如下处理

① 取值:自动调用类中的__get()
② 赋值:自动调用类中的__set()
③ 判断是否存在:自动调用类中的__isset()
④ 销毁:自动调用类中的__unset()

前提是预先定义好这些方法,否则会报错

<?php
class bee{
  public $ol = array();
  public function __get($key){
    if(isset($this->ol[$key])){
      return $this->ol[$key];
    }
    return $key.' not exists';
  }
  public function __set($key,$val){
    $this->ol[$key] = $val;
  }
  public function __isset($key){
    if(isset($this->ol[$key])){
      return true;
    }
    return false;
  }
  public function __unset($key){
    unset($this->ol[$key]);
  }
}
$obj = new bee();
echo $obj->one;
echo '<br>';
$obj->one = 1;
echo $obj->one;
echo '<br>';
var_dump(isset($obj->one));

运行结果如下:

one not exists
1
boolean true

2. 方法重载:如果使用一个不存在的方法,就会调用类中预先定义好的某个方法以处理该行为;

对于方法不用的应用场景,做如下处理

① 在对象中调用不可访问的方法:__call()
② 静态方式中调用不可访问方法:__callStatic()

<?php
class bee{
  public function __call($name,$arr){
    echo '<br>';
    echo 'function '.$name.' not exist';
  }
  static function __callStatic($name,$arr){
    echo '<br>';
    echo 'function '.$name.' not exist';
  }
  /*public function __call($name,$arr){
    $num = count($arr);
    if($num<1){
      $name();
    }else{
      $name = $name.'_one';
      $name($arr[0]);
    }
  }*/
}
$obj->func();
bee::staFunc();
/*$obj->func(1);
function func(){
  echo '<br>';
  echo 'no.0';
}
function func_one($val){
  echo '<br>';
  echo 'no.'.$val;
}*/

运行结果如下:

function func not exist
function staFunc not exist

注意:以上方法都属于魔术方法,都带有参数

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
一个php作的文本留言本的例子(一)
Oct 09 PHP
PHP中用header图片地址 简单隐藏图片源地址
Apr 09 PHP
PHP zlib扩展实现页面GZIP压缩输出
Jun 17 PHP
PHP基础知识介绍
Sep 17 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
Aug 21 PHP
smarty简单分页的实现方法
Oct 27 PHP
php中fgetcsv()函数用法实例
Nov 28 PHP
PHP基于文件存储实现缓存的方法
Jul 20 PHP
功能强大的php分页函数
Jul 20 PHP
详解EventDispatcher事件分发组件
Dec 25 PHP
ThinkPHP5.0框架控制器继承基类和自定义类示例
May 25 PHP
PHP Include文件实例讲解
Feb 15 PHP
PHP 闭包详解及实例代码
Sep 28 #PHP
php类的自动加载操作实例详解
Sep 28 #PHP
PHP对象克隆clone用法示例
Sep 28 #PHP
PHP简单遍历对象示例
Sep 28 #PHP
PHP标准类(stdclass)用法示例
Sep 28 #PHP
PHP类型约束用法示例
Sep 28 #PHP
PHP类和对象相关系统函数与运算符小结
Sep 28 #PHP
You might like
PHP文件上传实例详解!!!
2007/01/02 PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
2013/11/11 PHP
PHP中使用BigMap实例
2015/03/30 PHP
详谈PHP编码转换问题
2015/07/28 PHP
详解PHP执行定时任务的实现思路
2015/12/21 PHP
PHP设计模式之装饰器模式定义与用法详解
2018/04/02 PHP
js 链式延迟执行DOME
2012/01/04 Javascript
JS正则验证邮箱的格式详细介绍
2013/11/19 Javascript
教你如何自定义百度分享插件以及bshare分享插件的分享按钮
2014/06/20 Javascript
NodeJS学习笔记之Connect中间件模块(二)
2015/01/27 NodeJs
总结在前端排序中遇到的问题
2016/07/19 Javascript
微信小程序购物商城系统开发系列-工具篇的介绍
2016/11/21 Javascript
bootstrap table 表格中增加下拉菜单末行出现滚动条的快速解决方法
2017/01/05 Javascript
深入理解Node.js中的进程管理
2017/03/13 Javascript
详解打造 Vue.js 可复用组件
2017/03/24 Javascript
聊聊JavaScript如何实现继承及特点
2017/04/07 Javascript
BootStrap的双日历时间控件使用
2017/07/25 Javascript
前端跨域的几种解决方式总结(推荐)
2017/08/16 Javascript
Vue2.0实现调用摄像头进行拍照功能 exif.js实现图片上传功能
2018/04/28 Javascript
微信小程序自定义组件传值 页面和组件相互传数据操作示例
2019/05/05 Javascript
微信小程序实现侧边分类栏
2019/10/21 Javascript
js 递归json树实现根据子id查父id的方法分析
2019/11/08 Javascript
js 对象使用的小技巧实例分析
2019/11/08 Javascript
javascript递归函数定义和用法示例分析
2020/07/22 Javascript
微信小程序实现电子签名功能
2020/07/29 Javascript
创建与框架无关的JavaScript插件
2020/12/01 Javascript
使用python opencv对目录下图片进行去重的方法
2019/01/12 Python
Python 实现两个服务器之间文件的上传方法
2019/02/13 Python
python数据分析:关键字提取方式
2020/02/24 Python
2014年党支部承诺书
2014/05/30 职场文书
争先创优心得体会
2014/09/12 职场文书
2014年租房协议书范本
2014/10/30 职场文书
大班下学期个人总结
2015/02/13 职场文书
优秀乡村医生事迹材料(2016精选版)
2016/02/29 职场文书
MySQL和Oracle批量插入SQL的通用写法示例
2021/11/17 MySQL
Python实现GIF动图以及视频卡通化详解
2021/12/06 Python