课程名称:大话PHP设计模式
课程章节:SPL标准库简介、魔术方法的使用
课程讲师:Rango
课程内容:
这里介绍几个SPL库中的几个常用的数据结构
- 栈(先进后出)
$a = new SplStack();
$a->push('1');
$a->push('2');
echo $a->pop();
echo $a->pop();
// 结果:21
- 队列(先进先出)
$a = new SplQueue();
$a->enqueue('1');
$a->enqueue('2');
echo $a->dequeue();
echo $a->dequeue();
// 结果:12
- 最小堆(先进先出)
$a = new SplMinHeap();
$a->insert('1');
$a->insert('2');
echo $a->extract();
echo $a->extract();
// 结果:12
- 固定数组
$a = new SplFixedArray(10);
$a[0] = 123;
$a[9] = 1234;
var_dump($a);
/*
结果:object(SplFixedArray)#1 (10) {
[0]=>
int(123)
[1]=>
NULL
[2]=>
NULL
[3]=>
NULL
[4]=>
NULL
[5]=>
NULL
[6]=>
NULL
[7]=>
NULL
[8]=>
NULL
[9]=>
int(1234)
}
*/
- 什么是魔术方法?
- 是类中一种特殊的方法,触发某个行为时而调用的方法
// 魔术方法:__get
// 当调用类中不存在的属性时,会调用此方法,传调用的属性名称;如果不存在此方法,则返回空
class Class1{
public function __get($name) {
return time();
}
}
$a = new Class1();
echo $a->value1;
// 输出:1662651989
// 魔术方法:__set
// 当设置类中不存在的属性时,会调用此方法,传调用的属性名称和设置的值
class Class1{
public function __set($name, $value) {
echo "调用了__set魔术方法,传值:{$name}和{$value}";
}
}
$a = new Class1();
$a->value1 = 123;
// 输出:调用了__set魔术方法,传值:value1和123
// 魔术方法:__call
// 当调用类中不存在的方法时,会调用此方法,传调用的方法名和传的参数
class Class1{
public function __call($fun, $params) {
var_dump($fun, $params);
}
}
$a = new Class1();
$a->test(1, 2);
/*
输出:
string(4) "test"
array(2) {
[0]=>
int(1)
[1]=>
int(2)
}
*/
// 魔术方法:__callStatic
// 当调用类中不存在的静态方法时,会调用此方法,传调用的方法名和传的参数
class Class1{
static public function __callStatic($fun, $params) {
var_dump($fun, $params);
}
}
Class1::test(1, 2);
/*
输出:
string(4) "test"
array(2) {
[0]=>
int(1)
[1]=>
int(2)
}
*/
// 魔术方法:__toString
// 当类被以字符串方式使用时,会调用此方法,无传参
class Class1{
public function __toString() {
return 'this is a string';
}
}
$a = new Class1();
echo $a;
// 输出:this is a string
// 魔术方法:__invoke
// 当被实例化的类被当做一个函数来使用时,会调用此方法,传调用时的参数,且只有一个参数
class Class1{
public function __invoke($param) {
return "传进来的内容:{$param}";
}
}
$a = new Class1();
echo $a(1);
// 输出:传进来的内容:1
PHP中的SPL库还有很多函数,魔术方法也还有很多,可以自行点击上方的超链接打开查看
将这些方法灵活组合运用起来,可以实现更加强大的功能
课程收货
学习到了PHP中更多的基础内容
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦