慕课网----大话PHP设计模式 二(数据结构的php实现,链式操作,php魔方方法的使用)

5.关于栈的使用
//关于栈的php使用

$stack = new SplStack();
$stack->push("data1\n");
$stack->push("data2\n");

echo $stack->pop();
echo $stack->pop();

结果
这里写图片描述

6.关于队列的使用
//关于队列的php使用
queue=newSplQueue(); queue->enqueue(“data1\n”);
$queue->enqueue(“data2\n”);

echo queue>dequeue();echo queue->dequeue();
结果:
这里写图片描述

7.关于最小堆的使用
//关于最小堆
heap=newSplMinHeap(); heap->insert(“data1\n”);
$heap->insert(“data2\n”);

echo heap>extract();echo heap->extract();

这里写图片描述

8.固定数组

//固定数组
heap=newSplFixedArray(10); array[0] = 123;
array[9]=1234;vardump( array);
这里写图片描述

9.php链式操作
在每个方法后面都返回当前的对象的话,就能方便实现链式操作

return $this;

创建一个database的类。

class Database{
    function where($where){
        return $this;//在每个方法后面都返回当前的对象的话,就能方便实现链式操作
    }

    function order($order){
        return $this;
    }

    function limit($limit){
        return $this;
    }
}

然后在index.php中

//php链式操作
//$db = new Imooc\Database();
//$db->where("id=1")->where("name=2")->order("id desc")->limit(10);

10.php魔方方法的使用

1)__get/__set 将php对象的属性进行接管
2)__call/__callStatic 用来控制php方法的调用,callstatic是控制php静态方法的调用
3)__toString 将php对象转化成字符串
4)__invoke 将php对象当成一个函数来执行
具体可以看我写的php的例子,详细调用方法都写在注释里

首先,创建一个object类,代码如下

<?php
namespace Imooc;

class Object{
    //除了class object外,其他地方地方都不允许出现代码。
    //然后类名要和文件名一致
    //命名空间要和目录名保持一致


    protected $array = array();
    /**
     * 接管对象的属性
     * @param $key
     * @param $value
     */
    function __set($key, $value)
    {
        var_dump(__METHOD__);
        //如果调用不存在的属性的时候,就会调用set和get的魔术方法
        // TODO: Implement __set() method.
        //set的话就是把值放到数组里面然后这种方式的话就不用return也能保存到数组里的
        $this->array[$key] = $value;
    }

    /**
     * 接管对象的属性
     * @param $key
     * @param $value
     */
    function __get($key)
    {
        // TODO: Implement __set() method.
        var_dump(__METHOD__);
        return $this->array[$key];
    }

    /**
     * @param $func
     * @param $param
     */
    function __call($func, $param)
    {
        // TODO: Implement __call() method.
        //var_dump用这种方式可以打印两种变量
        var_dump($func, $param);
        return "magic function\n";
    }

    /**
     * @param $func
     * @param $param
     */
    static function __callStatic($func, $param)
    {
        // TODO: Implement __callStatic() method.
        var_dump($func, $param);
        return "magic static function\n";
    }

    /**
     * @return string
     */
    function __toString()
    {
        // TODO: Implement __toString() method.
        return __CLASS__;
    }

    function __invoke($param)
    {
        // TODO: Implement __invoke() method.
        var_dump($param);
        return "invoke";
    }
}

然后再index中分别测试调用

//get/set
//如调用一个php为定义的属性的时候,会报出错误
//然后使用了set和get的时候,当调用了不存在的对象属性的时候,就回去调用__set方法
//当去读取一个不存在的对象属性的时候,会去调用__get方法
//$obj = new Imooc\Object();
//$obj->title = "hello";
//echo $obj->title;
//call callStatic
//同理,如果调用的是不存在的函数方法的时候,就会调用call的魔法函数,然后如果是个静态的方法的话,就会使用__callstatic方法
$obj = new Imooc\Object();
echo $obj->test("hello", 123);
echo Imooc\Object::test("hello1", 1234);
//__toString __invoke
$obj = new Imooc\Object();
//因为echo出来的是字符串,所以需要转化成字符串
echo $obj;
//php中不能直接将对象当成函数处理的,所以会调用invoke方法
echo $obj("test1");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值