总结PHP5.1:autoloadPDOMySQLi类型约束PHP5.2:JSON支持PHP5.3:命名空间匿名函数闭包新魔法方法__callStatic()和__invoke()新魔法变量__DIR__动态调用static方法和延迟Heredoc和Nowdoc类的静态绑定。使用const在Nowdoc类之外定义常量。三元运算符。.5:yieldlist用于foreach细节修改PHP5.6:常量增强命名空间增强可变函数参数PHP7.0:标量类型声明定义返回值类型声明定义常量数组匿名类空合并运算符PHP7.1:Nullable类型void类型多异常捕获PHP7.2:新的对象对象允许重写抽象方法PHP7.3:语法层面没有大的变化PHP7.4:类型属性箭头函数Nullcoalescingoperator支持方法OpcachepreloadsPHP8.0:JITjust-in-timecompilationnamedparameterannotationjointtypeMatchexpressionNullsafeoperatorconstructorattributepromotionPHP5.1__autoload()魔术方法这是一个自动加载功能。在PHP5中,当我们实例化一个未定义的类时,就会触发这个函数。可以通过定义此函数来启用类的自动加载。function__autoload($className){$filePath=“project/class/{$className}.php”;如果(is_readable($filePath)){require($filePath);//这里只能使用require,因为一旦被包含最后php引擎再次遇到A类时,不会调用__autoload,而是直接使用内存中的A类,不会造成多次包含。}}$a=新A();$b=新B();$c=新C();PHP数据对象(PDO)扩展中的__autoload()魔术方法详解定义了一个轻量级的一致接口。安装您可以使用PHP的phpinfo()函数来检查是否安装了PDO扩展。//Linuxextension=pdo.so//Windowsextension=php_pdo.dlluse";/*您还可以执行搜索操作foreach($dbh->query('SELECT*fromFOO')as$row){print_r($row);//你可以用echo($GLOBAL);看到这些值;}*/$dbh=null;}catch(PDOException$e){die("Error!:".$e->getMessage()."
");}//默认不是长连接。如果需要长连接数据库,需要在最后加一个参数:array(PDO::ATTR_PERSISTENT=>true)变成这样:$db=newPDO($dsn,$user,$pass,array(PDO::ATTR_PERSISTENT=>true));PHPPDOMySQLimysqli.dll是PHP对mysql新特性的扩展支持,允许访问MySQL4.1及以上版本提供的函数。mysql和mysqli的区别:mysqli连接是永久连接,而mysql是非永久连接。每当第二次使用mysql连接时,都会重新开启一个新的进程。mysqli连接总是只使用相同的进程。使用$conn=mysqli_connect('localhost','root','123','db_test')or('error');$sql="从db_table中选择*";$query=mysqli_query($conn,$sql);while($row=mysqli_fetch_array($query)){echo$row['title'];}mysqli和mysql有什么区别?只适用于classandcallable(可执行类型)和数组(array),不适用于string和int//限制第一个参数为MyClass,第二个参数为可执行类型,第三个参数为数组functionMyFunction(MyClass$a,callable$b,array$c){//...}PHP5.2JSONjson_encode—JSON编码变量json_decode—解码JSON格式的字符串PHP5.3命名空间避免了不同包中的类名或变量名冲突=5.3.0延迟静态绑定PHP在5.3.0中增加了一个static关键字来引用当前类,实现了延迟静态绑定。这是因为self的语义本来就是“当前类”,所以PHP5.3给static关键字赋予了新的功能:latestaticbindingclassA{staticpublicfunctioncallFuncXXOO(){printself::funcXXOO();}staticpublicfunctionfuncXXOO(){return"A::funcXXOO()";}}B类扩展A{staticpublicfunctionfuncXXOO(){return"B::funcXXOO";}}$b=newB;$b->callFuncXXOO();//A::funcXXOO()A类{staticpublicfunctioncallFuncXXOO(){printstatic::funcXXOO();}//...}B::callFuncXXOO();//B::在funcXXOO()类之外使用const来定义常量常量是一个简单的标识符。该值在脚本执行期间不能更改(所谓的魔术常量除外,它们实际上不是常量)。默认情况下,常量区分大小写。通常常量标识符总是大写的。可以使用define()函数定义常量。php5.3.0之后,可以使用const关键字在类定义之外定义常量。以前版本中的const关键字只能在类(class)中使用。一旦定义了常量,就不能更改或取消定义。const和define的区别?const是一个语言结构,而define是一个函数。const比在编译时定义要快得多。const用于类成员变量的定义,一旦定义,就不能修改。define不能用于类成员变量的定义,只能用于全局常量。const可以在类中使用,define不能,const不能在条件语句中定义常量,const可以使用普通常量名,define可以使用表达式作为名字const只能接受静态标量,define可以使用任何表达式const定义常量区分大小写,define可以通过第三个参数指定是否区分大小写(true表示不区分大小写)。PHP常量详解:define和const的区别简化的三元运算符从PHP5.3开始,通过排除中间表达式,三元语句可以进一步简化。如果测试表达式在布尔上下文中的计算结果为真,则返回测试表达式的值。否则,将返回替代方法。buildFromDirectory(__DIR__.'/../','/.php$/');$phar->compressFiles(Phar::GZ);$phar->stopBuffering();$phar->setStub($phar->createDefaultStub('lib_config.php'));使用phar压缩包include'swoole.phar';include'swoole.phar/code/page.php';使用phar可以方便的打包你的代码,集成部署到线上机器上。phpphartutorial,PHP中phar包的使用教程PHP5.3中的新特性和弃用函数PHP5各版本新特性和新特性总结PHP5.4ShortOpenTag总结Shortopentags自PHP5开始一直打开。4个可用。//可以将//简写成:=$xxoo;?>数组简写//原始数组写法$arr=array("key"=>"value","key2"=>"value2");//缩写$arr=["key"=>"value","key2"=>"value2"];TraitsTraits是PHP多重继承的解决方案。PHP不能实现多重继承,但是一个类可以包含多个Traits//Traits不能单独实例化,只能包含在类中。traitSayWorld{publicfunctionsayHello(){echo'World!';}}classMyHelloWorld{//包含SayWorld的成员useSayWorld;}$xxoo=newMyHelloWorld();//sayHello()函数是来自SayWorld组件的$xxoo->sayHello();优先基类中的成员函数将被Traits中的Function覆盖,当前类中的成员函数将覆盖Traits中的函数。php5.4新特性Traits介绍内置web服务器PHP从5.4开始内置了一个轻量级的web服务器,不支持并发,定位于开发调试环境。在开发环境中使用确实很方便。php-Slocalhost:8000动态访问静态方法$func="funcXXOO";A::{$func}();实例化时访问类成员(newMyClass)->xxoo();php5.4小结PHP5.5yield关键字yield关键字在函数需要返回一个迭代器逐个返回值时使用。functionnumber10(){for($i=1;$i<=10;$i+=1)yield$i;}list()foreach$array=[[1,2,3],[4,5,6],];foreach($arrayaslist($a,$b,$c))echo"{$a}{$b}{$c}\n";细节修改不建议使用mysql函数,建议使用PDO或MySQLi。不再支持WindowsXP。MyClass::class可用于获取类的完整限定名(包括命名空间)empty()支持表达式作为参数。try-catch结构增加finally块PHP5.6常量增强定义常量时,允许使用之前定义的常量进行计算constA=2;常量B=A+1;允许常量作为函数参数默认值functionfunc($arg=C::STR2)asdf变量函数参数被用来代替func_get_args()functionadd(...$args){//...}同时,调用函数时可以将数组展开为函数参数:$arr=[2,3];add(1,...$arr);NamespaceEnhancedNamespace支持常量和函数string(字符串)functiontypeString(string$a){echo$a;}typeString('sad');//悲伤的返回值类型声明函数returnErrorArray():array{return'1456546';}print_r(returnErrorArray());/*ArrayFatalerror:UncaughtTypeError:returnArray()的返回值必须是数组类型,返回的是字符串在*/define中定义数组define('ANIMALS',['狗','猫','鸟']);回声动物[1];//输出"cat"匿名类匿名类就像是一个事先没有定义的类,但是在实例化定义的时候直接执行//直接define$objA=newclass{publicfunctiongetName(){echo“我是objA”;}};$objA->getName();PHP7匿名类空合并运算符的用法$username=$_GET['user']??'nobody';//这两个是等价的。当没有用户时,返回??以下参数$username=isset($_GET['user'])?$_GET['user']:'nobody';PHP7.1可空类型参数和返回类型现在可以通过在类型前添加问号来为空。启用此功能后,传入的参数或函数返回的结果为给定类型或null。$n*$factor,[1,2,3,4]);//$nums=array(10,20,30,40);?>空合并运算符支持方法OpcachePreloadOpcache将获取您的PHP源文件,将它们编译成“操作码”,然后将这些编译后的文件存储在磁盘上。opcache跳过源文件和PHP解释器在运行时实际需要的内容之间的转换步骤。掌握PHP7.x各版本新特性PHP7.0~PHP7.1~PHP7.2~PHP7.3~PHP7.4新特性PHP8.0JIT即时编译Opcache目前提供PHP8的JITJIT提供在Opcache优化的基础上,结合Runtime信息再次优化,直接生成机器码JIT并不是对原来Opcache优化的替代,而是一种增强。目前,PHP8仅支持x86CPU架构。命名参数就是命名参数。调用函数时,可以指定参数。name,指定参数名后,参数order可以不安装原函数参数order//传统方式调用balance(100,20);//php8使用命名参数调用balance(amount:100,payment:20);annotations使用annotations类可以定义为低解耦、高内聚的元数据类。使用时可以通过注解的方式灵活引入,在注解类实例的反射上就可以达到调用的目的。注解类只有在实例化时才会调用关节类型。在参数类型不确定的场景下,可以使用函数printSomeThing(string|int$value){var_dump($value);}匹配表达式,类似switchcash。但是严格===匹配'thisa','c'=>'thisc',0=>'this0','b'=>'lastb',};echo$str;//输出最后一个bNullsafe操作符//没有实例User类,设置为null$user=null;echo$user->getName();//在php8之前调用,报错echo$user?->getName();//php8调用,没有报错,返回空构造函数属性提升在构造函数中,可以声明类属性的修饰作用域name=$name;$this->age=$age;}}//php8写法,classUser{publicfunction__construct(protectedstring$name,protectedint$age){}}实例讲解PHP8新特性
