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 相关文章推荐
UCenter Home二次开发指南
May 28 PHP
php $_ENV为空的原因分析
Jun 01 PHP
PHP similar_text 字符串的相似性比较函数
May 26 PHP
PHP 函数执行效率的小比较
Oct 17 PHP
PHP用SAX解析XML的实现代码与问题分析
Aug 22 PHP
php 数组动态添加实现代码(最土团购系统的价格排序)
Dec 30 PHP
php的SimpleXML方法读写XML接口文件实例解析
Jun 16 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
Dec 21 PHP
ThinkPHP项目分组配置方法分析
Mar 23 PHP
PHP实现通过URL提取根域名
Mar 31 PHP
PHP+Mysql+Ajax实现淘宝客服或阿里旺旺聊天功能(前台页面)
Jun 16 PHP
php基于Redis消息队列实现的消息推送的方法
Nov 28 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
全国FM电台频率大全 - 20 广西省
2020/03/11 无线电
咖啡与牛奶
2021/03/03 冲泡冲煮
Thinkphp中的volist标签用法简介
2014/06/18 PHP
php使用pear_smtp发送邮件
2016/04/15 PHP
laravel 修改.htaccess文件 重定向public的解决方法
2019/10/12 PHP
JavaScript 获取用户客户端操作系统版本
2009/08/25 Javascript
JavaScript Sort 表格排序
2009/10/31 Javascript
jquery 事件对象属性小结
2010/04/27 Javascript
formValidator3.3的ajaxValidator一些异常分析
2011/07/12 Javascript
JQuery通过Ajax提交表单并返回结果
2011/07/31 Javascript
jQuery(非HTML5)可编辑表格实现代码
2012/12/11 Javascript
jquery 模板的应用示例
2013/11/12 Javascript
js写的方法实现上传图片之后查看大图
2014/03/05 Javascript
Bootstrap每天必学之模态框(Modal)插件
2016/04/26 Javascript
Javascript获取随机数的实现方法
2016/06/22 Javascript
js中遍历对象的属性和值的方法
2016/07/27 Javascript
关于JavaScript和jQuery的类型判断详解
2016/10/08 Javascript
浅谈JS函数定义方式的区别
2016/10/30 Javascript
利用BootStrap的Carousel.js实现轮播图动画效果
2016/12/21 Javascript
浅析从vue源码看观察者模式
2018/01/29 Javascript
vuex的简单使用教程
2018/02/02 Javascript
如何用webpack4带你实现一个vue的打包的项目
2018/06/20 Javascript
[53:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第一场 1月31日
2021/03/11 DOTA
Python ljust rjust center输出
2008/09/06 Python
在Django的URLconf中使用多个视图前缀的方法
2015/07/18 Python
python中requests小技巧
2017/05/10 Python
解决pandas 作图无法显示中文的问题
2018/05/24 Python
Python实现快速计算词频功能示例
2018/06/25 Python
python打造爬虫代理池过程解析
2019/08/15 Python
利用Python产生加密表和解密表的实现方法
2019/10/15 Python
详解python内置模块urllib
2020/09/09 Python
python 下载文件的多种方法汇总
2020/11/17 Python
新西兰最大的天然保健及护肤品网站:HealthPost(直邮中国)
2021/02/13 全球购物
公务员职务工作的自我评价
2013/11/01 职场文书
国旗下的讲话演讲稿
2014/05/08 职场文书
如何书写民事调解协议书?
2019/06/25 职场文书