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 array_merge下进行数组合并的代码
Jul 22 PHP
php反弹shell实现代码
Apr 22 PHP
PHPMailer 中文使用说明小结
Jan 22 PHP
PHP+memcache实现消息队列案例分享
May 21 PHP
php无限极分类递归排序实现方法
Nov 11 PHP
PHP中文编码小技巧
Dec 25 PHP
php+jQuery+Ajax实现点赞效果的方法(附源码下载)
Jul 21 PHP
Thinkphp 中 distinct 的用法解析
Dec 14 PHP
php实现头像上传预览功能
Apr 27 PHP
Laravel学习教程之request validation的编写
Oct 25 PHP
对laravel的session获取与存取方法详解
Oct 08 PHP
PHP网页缓存技术优点及代码实例
Jul 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
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
2007/08/26 PHP
php $_SERVER[&quot;REQUEST_URI&quot;]获取值的通用解决方法
2010/06/21 PHP
PHP中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
2013/02/14 PHP
php IP转换整形(ip2long)的详解
2013/06/06 PHP
php防止伪造数据从地址栏URL提交的方法
2014/08/24 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
2017/06/06 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
javascript 检测浏览器类型和版本的代码
2009/09/15 Javascript
js通过元素class名字获取元素集合的具体实现
2014/01/06 Javascript
浅谈Unicode与JavaScript的发展史
2015/01/19 Javascript
JQuery插件Quicksand实现超炫的动画洗牌效果
2015/05/03 Javascript
javascript实现查找数组中最大值方法汇总
2016/02/13 Javascript
jQuery中设置form表单中action值的实现方法
2016/05/25 Javascript
jQuery实现查找链接文字替换属性的方法
2016/06/27 Javascript
关于Sequelize连接查询时inlude中model和association的区别详解
2017/02/27 Javascript
详解使用Vue Router导航钩子与Vuex来实现后退状态保存
2017/09/11 Javascript
详解Vue取消eslint语法限制
2018/08/04 Javascript
jQuery事件委托代码实践详解
2019/06/21 jQuery
Vue代码整洁之去重方法整理
2019/08/06 Javascript
详解vue实现坐标拾取器功能示例
2020/11/18 Vue.js
Python用zip函数同时遍历多个迭代器示例详解
2016/11/14 Python
python3+dlib实现人脸识别和情绪分析
2018/04/21 Python
Python创建普通菜单示例【基于win32ui模块】
2018/05/09 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
2019/06/04 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
2019/08/08 Python
logging level级别介绍
2020/02/21 Python
python实现简单的tcp 文件下载
2020/09/16 Python
如何给HTML标签中的文本设置修饰线
2019/11/18 HTML / CSS
德国综合购物网站:OTTO
2018/11/13 全球购物
运输企业安全生产责任书
2014/07/28 职场文书
群众路线个人剖析材料及整改措施
2014/11/04 职场文书
计算机实训报告总结
2014/11/05 职场文书
2015教师节通讯稿
2015/07/20 职场文书
推荐六本经典文学奖书籍:此生必读
2019/08/22 职场文书
Jupyter Notebook内使用argparse报错的解决方案
2021/06/03 Python
JavaScript实现九宫格拖拽效果
2022/06/28 Javascript