博客列表 >20191008作业

20191008作业

庆选的博客
庆选的博客原创
2019年10月22日 13:57:40704浏览

作业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 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议