博主信息
博文 42
粉丝 0
评论 0
访问量 45469
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
20191008作业
庆选的博客
原创
850人浏览过

作业1: 实例演示四个属性重载的魔术方法的使用方式

<?php

namespace _php;

class Demo
{
    protected $name;
    private $salary;
    public $counry;
    public function __construct($name,$salary)
    {
        $this->name=$name;
        $this->salary=$salary;

    }

    public function  __get($name)
    {
//        if($name==='admin'){
//            return $this->$name  ;
//        }else{
//            return '无权查看';
//        }

        return ($this->name==='admin') ? $this->$name :'无权查看';

    }

    public function  __set($name,$value)
    {
        return $this->$name =$value ;
    }

 public function __isset($name)
{
    return isset($this->$name);
}

public function __unset($name)
{
    unset($this->$name);
}
}

$query = new Demo('admin',9000);

echo $query->salary;

echo "<hr>";
echo  $query->salary='6000';

2、 实例演示call_user_func_array()回调执行函数/对象/类的方法的流程与方式

实例

<?php

namespace _php;

//call_user_func_array() 调用函数
function sum($a,$b)
{
    return "{$a} + {$b} = " . ($a + $b);
}

echo call_user_func_array(__NAMESPACE__.'\sum',[50,60]);
echo '<hr>';


//call_user_func_array() 调用类函数/对象

class Test
{
    public function sum($a,$b)
    {
        return "{$a} + {$b} = " . ($a + $b);
    }

    public function sum2($a,$b)
    {
        return "{$a} - {$b} = " . ($a - $b);
    }

    public static function sum3($a,$b)
    {
        return "{$a} * {$b} = " . ($a * $b);
    }

    public static function sum4($a,$b)
    {
        return "{$a} / {$b} = " . ($a / $b);
    }

}
//常规调用对象及类
$obj = new Test();
echo  call_user_func_array([$obj,'sum'],[55,60]);
echo '<hr>';
echo call_user_func_array([new Test(), 'sum'], [33, 33]);
echo '<hr>';
//调用静态类及对象
echo call_user_func_array([Test::class,'sum3'],[50,2]);
echo '<hr>';
echo call_user_func_array([$obj, 'sum3'], [2, 2]);

运行实例 »

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

3、实例演示方法重载的实现原理与参数获取方式

实例

<?php

//当访问类中没有命名的方法就自动调用默认方法,叫方法重载
//方法重载:__call();  静态方法__callstatic();

namespace _php;
class Test
{
    public function __call($name, $arguments)
    {
        return '方法名:'.$name.'<br>参数:'.print_r($arguments,true);

    }


    public static function __callStatic($name, $arguments)
    {
        return '方法名:'.$name.'<br>参数:'.print_r($arguments,true);
    }


   public static function set($name, $arguments)
   {
       return '方法名:'.$name.'<br>参数:'.print_r($arguments,true);
   }
    public static function ser($name, $arguments)
    {
        return '方法名:'.$name.'<br>参数:'.print_r($arguments,true);
    }
}

$obj = new Test();
//echo $obj->test('11','22','33','44');

echo Test::set1('test','11','22','33','44');

运行实例 »

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

4、实例演示数据库链接调用的实现原理与过程(静态方法重载__callStatic实现)

实例

<?php
namespace _1008;

require 'Query.php';

class DB
{
    // 连接对象
    protected static $pdo = null;

    // 数据库的连接方法
    public static function connection()
    {
        self::$pdo = new \PDO('mysql:host=127.0.0.1;dbname=chenqingxuan', 'root', 'cqx07231950');
    }

    public static function __callStatic($name, $arguments)
    {
        // 连接数据库
        self::connection();
        // 实例化查询类,将连接对象做为参数
        $query = new Query(self::$pdo);
        // 调用查询对象$query中的对应的方法
        return call_user_func_array([$query, $name],$arguments);
    }
}

$staffs = DB::table('staff')
    ->field('staff_id,name,position,mobile')
    ->where('staff_id > 2')
    ->limit(5)
    ->select();

// 遍历
foreach ($staffs as $staff) {
    print_r($staff); echo '<br>';
}

运行实例 »

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


批改状态:合格

老师批语:才学到这里, 有点慢, 作业先完成当下正在学的
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系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+教程免费学