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");