博主信息
博文 34
粉丝 0
评论 1
访问量 29131
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
方法重载与静态继承 —2018年9月4日23时45分
感恩的心的博客
原创
767人浏览过


1、重载

实例

<?php
/*
重载
 *  */
class Test{
    public function __call($name, $arguments) {
        $args= implode(',', $arguments);
        return '方法名:'.$name.'<br>参数:'.$args.'<br>';
    }
    
    //创建私有方法
    private function select(){
        return __METHOD__;
    }
    
    public static function __callStatic($name, $arguments) {
        $args = implode(',', $arguments);
        return '方法名:' . $name . '<br>参数:' . $args . '<br>';
    }

}

$test=new Test();

echo $test->show(),'<br>';
echo $test->show(), '<br>';

运行实例 »

点击 "运行实例" 按钮查看在线实例

 


2、静态继承


实例

<?php
/**
 * call_user_func_array():执行方法或回调函数
 * call_user_func_array(函数/方法[, 参数数组])
 */
//场景一:计算2个整数之和
echo call_user_func_array(function($m,$n){return $m+$n;}, [10,20]), '<hr>';

//场景二:执行对象方法
class Hello1{
    public function add($m, $n) {
        return $m + $n;
    }

}

echo call_user_func_array([new Hello1(),'add'], [100,200]),'<hr>';

//场景3:执行类中静态方法
class Hello2{
    public static function add($m, $n) {
        return $m + $n;
    }

}
echo call_user_func_array(['Hello2', 'add'], [200, 200]), '<hr>';

运行实例 »

点击 "运行实例" 按钮查看在线实例

3、链式调用,类似thinkphp

实例

<?php
/**
 * 方法重载的实战案例: 模拟ThinkPHP5.1中的数据库链式操作
 * 用方法重载实现方法跨类调用
 */

//Db::table()->fields()->where()->select();
require 'Query.php';

class Db{
    public static function __callStatic($name, $arguments) {
        return call_user_func_array([new Query(),$name], $arguments);
    }
}
echo '<pre>';
$result=Db::table('staff')
        ->fields('staff_id,name,salary')
        ->where('salary>2000')
        ->select();

print_r($result);

运行实例 »

点击 "运行实例" 按钮查看在线实例

实例

<?php
class Query{
    
    private $sql=[];
    
    private $pdo=null;
    
    //构造方法:连接数据库
    public function __construct() {
        $this->pdo=new PDO('mysql:host=127.0.0.1;dbname=php','root','root123');
    }
    
    //table
    public function table($table){
        $this->sql['table']=$table;
        return $this;        
    }
    
    //fields
    public function fields($fields){
        $this->sql['fields'] = $fields;
        return $this;
    }
    
    //where
    public function where($where){
        $this->sql['where']=$where;
        return $this;        
    }
    
    //执行查询,终极方法
    public function select(){
        $sql="SELECT {$this->sql['fields']} FROM {$this->sql['table']} WHERE {$this->sql['where']}";
        $stmt= $this->pdo->prepare($sql);
        $stmt->execute();
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
        
    }
    
}

运行实例 »

点击 "运行实例" 按钮查看在线实例

 

 

批改状态:未批改

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学