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下过滤HTML代码的函数
Dec 10 PHP
PHP 批量删除 sql语句
Jun 05 PHP
PHP 全角转半角实现代码
May 16 PHP
php定时删除文件夹下文件(清理缓存文件)
Jan 23 PHP
php header功能的使用
Oct 28 PHP
Codeigniter框架的更新事务(transaction)BUG及解决方法
Jul 25 PHP
PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
Nov 30 PHP
PHP  Yii清理缓存的实现方法
Nov 10 PHP
php微信公众平台开发(四)回复功能开发
Dec 06 PHP
PHP实现的最大正向匹配算法示例
Dec 19 PHP
php unlink()函数使用教程
Jul 12 PHP
PHP后期静态绑定之self::限制实例分析
Dec 21 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中显示数组与对象的实现代码
2011/04/18 PHP
PHP表单提交表单名称含有点号(.)则会被转化为下划线(_)
2011/12/14 PHP
理解PHP中的stdClass类
2014/04/18 PHP
WordPress开发中自定义菜单的相关PHP函数使用简介
2016/01/05 PHP
yii使用bootstrap分页样式的实例
2017/01/17 PHP
详解php curl带有csrf-token验证模拟提交方法
2018/04/18 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
javascript 面向对象编程 万物皆对象
2009/09/17 Javascript
JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
2011/09/28 Javascript
php is_numberic函数造成的SQL注入漏洞
2014/03/10 Javascript
jQuery实现的Div窗口震动特效
2014/06/09 Javascript
jQuery动画与特效详解
2015/02/01 Javascript
jQuery使用prepend()方法在元素前添加内容用法实例
2015/03/26 Javascript
jquery自适应布局的简单实例
2016/05/28 Javascript
基于jQuery实现中英文切换导航条效果
2016/09/18 Javascript
ES6新特性之字符串的扩展实例分析
2017/04/01 Javascript
nodeJs爬虫的技术点总结
2018/05/13 NodeJs
微信小程序开发之tabbar图标和颜色的实现
2018/10/17 Javascript
vue 使用鼠标滚动加载数据的例子
2019/10/31 Javascript
vue-model实现简易计算器
2020/08/17 Javascript
Python虚拟环境virtualenv的安装与使用详解
2017/05/28 Python
Django 表单模型选择框如何使用分组
2019/05/16 Python
Django分页功能的实现代码详解
2019/07/29 Python
keras.utils.to_categorical和one hot格式解析
2020/07/02 Python
python 如何对logging日志封装
2020/12/02 Python
CSS3控制HTML元素动画效果
2014/02/08 HTML / CSS
HTML 5.1来了 9月份正式发布 更新内容预览
2016/04/26 HTML / CSS
德国baby-markt婴儿用品瑞士网站:baby-markt.ch
2017/06/09 全球购物
什么是lambda函数
2013/09/17 面试题
MYSQL基础面试题
2012/05/13 面试题
经典促销广告词大全
2014/03/19 职场文书
环保项目建议书
2014/08/26 职场文书
幼儿园感恩节活动方案2014
2014/10/11 职场文书
初中地理教学反思
2016/02/19 职场文书
2019预备党员转正申请书模板2篇!
2019/08/07 职场文书
springboot读取nacos配置文件
2022/05/20 Java/Android