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 相关文章推荐
NOD32 v2.70.32 简体中文封装版 提供下载了
Feb 27 PHP
fleaphp crud操作之findByField函数的使用方法
Apr 23 PHP
PHP获取文件夹内文件数的方法
Mar 12 PHP
PHP数组与对象之间使用递归实现转换的方法
Jun 24 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
Mar 23 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
Sep 11 PHP
php实现微信模拟登陆、获取用户列表及群发消息功能示例
Jun 28 PHP
windows下的WAMP环境搭建图文教程(推荐)
Jul 27 PHP
Laravel下生成验证码的类
Nov 15 PHP
PHP 计算两个特别大的整数实例代码
May 07 PHP
redis+php实现微博(三)微博列表功能详解
Sep 23 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
Oct 16 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
点评山进PR-D3L三波段收音机
2021/03/02 无线电
MVC模式的PHP实现
2006/10/09 PHP
PHP5.3.1 不再支持ISAPI
2010/01/08 PHP
Yii核心组件AssetManager原理分析
2014/12/02 PHP
学习php设计模式 php实现装饰器模式(decorator)
2015/12/07 PHP
探究Laravel使用env函数读取环境变量为null的问题
2016/12/06 PHP
JavaScript面向对象编程
2008/03/02 Javascript
Ajax搜索结果页面下方的分页按钮的生成
2012/04/05 Javascript
JS 各种网页尺寸判断实例方法
2013/04/18 Javascript
基于KMP算法JavaScript的实现方法分析
2013/05/03 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2013/08/12 Javascript
node.js中的http.request.end方法使用说明
2014/12/10 Javascript
JQuery实现网页右侧随动广告特效
2016/01/17 Javascript
JavaScript模拟文件拖选框样式v1.0的实例
2017/08/04 Javascript
Javascript中将变量转换为字符串的三种方法
2017/09/19 Javascript
node.js 模块和其下载资源的镜像设置的方法
2018/09/06 Javascript
vue-router源码之history类的浅析
2019/05/21 Javascript
用node.js写一个jenkins发版脚本
2019/05/21 Javascript
Vue Autocomplete 自动完成功能简单示例
2019/05/25 Javascript
如何通过shell脚本自动生成vue文件详解
2019/09/10 Javascript
layui table 多行删除(id获取)的方法
2019/09/12 Javascript
Vue按时间段查询数据组件使用详解
2020/08/21 Javascript
[42:25]EG vs Spirit Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
python启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
2009/04/09 Python
Python实现字典排序、按照list中字典的某个key排序的方法示例
2018/12/18 Python
python 通过麦克风录音 生成wav文件的方法
2019/01/09 Python
python 使用装饰器并记录log的示例代码
2019/07/12 Python
python openpyxl使用方法详解
2019/07/18 Python
python不使用for计算两组、多个矩形两两间的iou方式
2020/01/18 Python
Python实现括号匹配方法详解
2020/02/10 Python
pycharm2020.2 配置使用的方法详解
2020/09/16 Python
Get The Label中文官网:英国运动时尚购物平台
2017/04/19 全球购物
如果有两个类A,B,怎么样才能使A在发生一个事件的时候通知B
2016/03/12 面试题
中秋节晚会开场白
2015/05/29 职场文书
大学军训口号大全
2015/12/24 职场文书
如何制作自己的原生JavaScript路由
2021/05/05 Javascript