php>5.5.0
生成器提供简单的对象迭代,相比较定义类实现Iterator接口,性能开销和复杂性大大降低。
像定义普通函数那样,不过普通函数只返回一次,而生成器根据语言yield多次。
function xrang($s,$l,$ss){ for($i=$s;$i<=$l;$i+=$ss){ yield $i; } } foreach(xrang(1,9,1) as $num){ echo $num; }
可以返回键值对
yield $id=>$fields;
当你要实现某一些功能时,可以先考虑一下packagist里面是否已经有了可以直接用了。
可以通过composer require 组件,下载到目录里面的vendor目录下,里面有一个autoload.php文件用来自动加载使用组件。
根目录下有composer.json,composer.lock,一般不用管,组件的配置文件。
使用时,只要在需要使用组件的地方,引用autoload.php就可以了。
foreach可以遍历类中所有能够访问的可见属性。
重载指的是动态的创建类属性和方法,当调用到这些不存在的不能访问的成员时,响应的魔术方法就会调用。
属性的重载
__set($name,$value) __get($name) __isset($name) __unset($name)
方法的重载
__call($name,$arguments) __callStatic($name,$argument)
php7开始支持匿名类。可以创建一次性简单对象。
$util->setLogger(new Class{ 定义类 可以继承类和接口,使用trait }); new Class(构造参数) extends implements
php5.4后实现了种trait的代码复用方法。
trait的声明和类有点类似,不过它不能用来实例化,也不用类继承它再使用。而是在类中用use关键字声明使用它。
当前类的成员覆盖trait的方法,而trait则覆盖了被继承的方法。
trait funs{ fun1()... fun2().... } class ss{ use funs,...; fun1(); fun2(); }
可以引入多个trait,会发生冲突,具体查,trait可以互相组成构建,还有方法控制,抽象方法,静态成员,属性。
每次用类都要引入文件,烦不烦
php5可以用 spl_autoload_register()函数,不建议使用_autoload()函数。
spl_autoload_register(function($class_name){ require_once $class_name.".php"; })
可以注册多个加载器function
如果前面的加载器没有找到,就会使用下一个加载器
php5.5起
namespace NS{ class ClassName{} echo ClassName::class; }
会输出 NS\ClassName,会加上命名空间
匿名函数也叫闭包函数,是通过Closure类来实现的,
$sss=function(参数){};
$sss是一个closure对象,闭包函数
闭包函数里面使用外部变量
$message="hi"; $example=function() use ($message){}
use还可以声明&引用来传递
可以返回任何类型的数据,用数组的形式返回多个值,return之后控制权交回给调用这个函数的地方。