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 相关文章推荐
BBS(php &amp; mysql)完整版(三)
Oct 09 PHP
PHP实现抓取HTTPS内容
Dec 01 PHP
php从字符串创建函数的方法
Mar 16 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
May 13 PHP
php文件操作之小型留言本实例
Jun 20 PHP
PHP MVC框架路由学习笔记
Mar 02 PHP
php HTML无刷新提交表单
Apr 05 PHP
使用一个for循环将N*N的二维数组的所有值置1实现方法
May 29 PHP
自写的利用PDO对mysql数据库增删改查操作类
Feb 19 PHP
浅谈php://filter的妙用
Mar 05 PHP
php使用fputcsv实现大数据的导出操作详解
Feb 27 PHP
PHP实现图片防盗链破解操作示例【解决图片防盗链问题/反向代理】
May 29 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
一个图形显示IP的PHP程序代码
2007/10/19 PHP
在同一窗体中使用PHP来处理多个提交任务
2008/05/08 PHP
php下清空字符串中的HTML标签的代码
2010/09/06 PHP
PHP中串行化用法示例
2016/11/16 PHP
PHP中的empty、isset、isnull的区别与使用实例
2019/03/22 PHP
页面按钮禁用与解除禁用的方法
2014/02/19 Javascript
javascript实现判断鼠标的状态
2015/07/10 Javascript
JavaScript jquery及AJAX小结
2016/01/24 Javascript
js实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)
2016/03/09 Javascript
AngularJS入门教程之表格实例详解
2016/07/27 Javascript
利用select实现年月日三级联动的日期选择效果【推荐】
2016/12/13 Javascript
集成vue到jquery/bootstrap项目的方法
2018/02/10 jQuery
Node.js实现注册邮箱激活功能的方法示例
2018/03/23 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
2018/04/09 Javascript
js中console在一行内打印字符串和对象的方法
2019/09/10 Javascript
JS实现吸顶特效
2020/01/08 Javascript
简单介绍Python2.x版本中的cmp()方法的使用
2015/05/20 Python
Python Matplotlib 基于networkx画关系网络图
2019/07/10 Python
Python的numpy库下的几个小函数的用法(小结)
2019/07/12 Python
15个Pythonic的代码示例(值得收藏)
2020/10/29 Python
移动web模拟客户端实现多方框输入密码效果【附代码】
2016/03/25 HTML / CSS
Joe Fresh官网:加拿大时尚品牌和零售连锁店
2016/11/30 全球购物
俄罗斯香水和化妆品购物网站:Л’Этуаль
2018/05/10 全球购物
英国屋顶用品和材料超市:Roofing Supplies UK
2019/08/24 全球购物
Java里面Pass by value和Pass by Reference是什么意思
2016/05/02 面试题
商务英语本科生的自我评价分享
2013/11/15 职场文书
电气专业推荐信范文
2013/11/18 职场文书
幼儿园家长会邀请函
2014/01/15 职场文书
维修工先进事迹
2014/05/29 职场文书
党的群众路线教育实践活动对照检查材料范文
2014/09/24 职场文书
村干部任职承诺书
2015/01/21 职场文书
怎样写家长意见
2015/06/04 职场文书
PyCharm 安装与使用配置教程(windows,mac通用)
2021/05/12 Python
Python机器学习之基础概述
2021/05/19 Python
Opencv实现二维直方图的计算及绘制
2021/07/21 Python
TypeScript 内置高级类型编程示例
2022/09/23 Javascript