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 相关文章推荐
桌面中心(四)数据显示
Oct 09 PHP
php自动注册登录验证机制实现代码
Dec 20 PHP
smarty表格换行实例
Dec 15 PHP
php约瑟夫问题解决关于处死犯人的算法
Mar 23 PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
Jul 23 PHP
PHP中利用sleep函数实现定时执行功能实现代码
Aug 25 PHP
PHP实现的数独求解问题示例
Apr 18 PHP
php数值转换时间及时间转换数值用法示例
May 18 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
Apr 21 PHP
thinkphp5框架API token身份验证功能示例
May 21 PHP
PHP 构造函数和析构函数原理与用法分析
Apr 21 PHP
PHP7 其他修改
Mar 09 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
Linux下ZendOptimizer的安装与配置方法
2007/04/12 PHP
php中防止恶意刷新页面的代码小结
2012/10/31 PHP
php无限遍历目录示例
2014/02/21 PHP
ThinkPHP 3.2 版本升级了哪些内容
2015/03/05 PHP
学习PHP session的传递方式
2016/06/15 PHP
微信第三方登录(原生)demo【必看篇】
2017/05/26 PHP
PHP在弹框中获取foreach中遍历的id值并传递给地址栏
2017/06/13 PHP
JavaScript中的私有成员
2006/09/18 Javascript
js预载入和JavaScript Image()对象使用介绍
2011/08/28 Javascript
AngularJS学习笔记之TodoMVC的分析
2015/02/22 Javascript
js事件驱动机制 浏览器兼容处理方法
2016/07/23 Javascript
基于jQuery实现照片墙自动播放特效
2017/01/12 Javascript
js replace()去除代码中空格的实例
2017/02/14 Javascript
新手快速入门JavaScript装饰者模式与AOP
2019/06/24 Javascript
layui实现把数据表格时间戳转换为时间格式的例子
2019/09/12 Javascript
JS猜数字游戏实例讲解
2020/06/30 Javascript
vue中父子组件传值,解决钩子函数mounted只运行一次的操作
2020/07/27 Javascript
vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题
2020/07/31 Javascript
[40:48]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第二局
2016/02/28 DOTA
Python中让MySQL查询结果返回字典类型的方法
2014/08/22 Python
Python正则捕获操作示例
2017/08/19 Python
Python入门必须知道的11个知识点
2018/03/21 Python
python中in在list和dict中查找效率的对比分析
2018/05/04 Python
python基础学习之如何对元组各个元素进行命名详解
2018/07/12 Python
python基于SMTP协议发送邮件
2019/05/31 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
2020/01/25 Python
python的数学算法函数及公式用法
2020/11/18 Python
美国韩国化妆品和护肤品购物网站:Beautytap
2018/07/29 全球购物
澳洲CFL商城:CHEMIST FOR LESS(中文)
2021/02/28 全球购物
房地产销售员的自我评价分享
2013/12/04 职场文书
自荐信格式简述
2014/01/25 职场文书
项目建议书模板
2014/05/12 职场文书
应聘护士求职信
2014/07/21 职场文书
学会感恩主题班会
2015/08/12 职场文书
2016年清明节红领巾广播稿
2015/12/17 职场文书
讲解MySQL增删改操作
2022/05/06 MySQL