Blogger Information
Blog 42
fans 0
comment 0
visits 36460
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
20191008作业
庆选的博客
Original
699 people have browsed it

作业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>';
}

运行实例 »

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


Correction status:qualified

Teacher's comments:才学到这里, 有点慢, 作业先完成当下正在学的
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post