首页 / PHP / PHP

读一读

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之后控制权交回给调用这个函数的地方。