我是靠谱客的博主 激情金毛,最近开发中收集的这篇文章主要介绍PHP基础注意点,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

is_callable和method_exists

is_callable: 用来判断对应类的方法当前有没有权限使用,同时存不存在
method_exists: 仅仅能判断当前方法存不存在

  • is_callable比method_exists慢
class Test{
public function pubFun(){}
private function priFun(){}
}
class Index{
private function array_sort(){}
public function index(){
$model = new Test();
var_dump(is_callable([$model,'pubFun']));//true,方法存在
var_dump(is_callable([$model,'priFun']));//false,方法不可调用
var_dump(is_callable([$model,'unFun']));//false,方法不存在
var_dump(is_callable([$this,'array_sort']));//true,方法可调用
var_dump(method_exists($model,'pubFun'));//true,方法存在
var_dump(method_exists($model,'priFun'));//true,方法存在
}
}

foreach和while和for

  • foreach访问数组元素性能是最优的方法 —出自[PHP与MySQL高性能应用开发]

isset

false:没有定义或为null

var_dump(isset($a));//false
$a = null;
var_dump(isset($a));//false
$a = '';
var_dump(isset($a));//true

empty

一维的空数组返回true,空格返回false

var_dump( empty( array() ) );//true
var_dump( empty( array( arrya() ) ) );//false
var_dump( empty( ' ' ) );//false

静态变量

函数体内如果在定义静态变量的同时进行了初始化,则以后程序不再进行初始化操作(出现在函数内部的基本类型的的静态变量初始化语句只有在第一次调用才执行)
这里写图片描述

PHP之static静态变量详解(一) - 52php - 博客园

继承

abstract class ParentClass{
public $a = '1';
protected $b = '2';
private $c = '3';
public $d = '4';
protected $parent = 'parnet';
public function test(){
echo __CLASS__.' '.__FUNCTION__.PHP_EOL;
}
public function test2(){
echo __CLASS__.' '.__FUNCTION__.PHP_EOL;
}
public function test3(){
echo __CLASS__.' '.__FUNCTION__.PHP_EOL;
}
private function test4(){
echo __CLASS__.' '.__FUNCTION__.PHP_EOL;
}
}
class ChildClass extends ParentClass{
public $a = 'a';
protected $b = 'b';
public $c = 'c';
//报错
//private $d = 'd';
public function test(){
echo __CLASS__.' '.__FUNCTION__.PHP_EOL;
}
//报错,不能比父类定义的权限低
/* protected function test3(){
echo __CLASS__.' '.__FUNCTION__.PHP_EOL;
} */
//可以比父类的权限大或相等
protected function test4(){
echo __CLASS__.' '.__FUNCTION__.PHP_EOL;
}
/* public function test2($var){
echo __CLASS__.' '.__FUNCTION__.' '.$var.PHP_EOL;
} */
public function getB(){
echo $this->b.PHP_EOL;
}
public function getC(){
echo $this->c.PHP_EOL;
}
public function getParent(){
echo $this->parent.PHP_EOL;
}
}
//报错抽象方法不能实例化Cannot instantiate abstract class ParentClass
//$parent = new ParentClass();
//var_dump($parent);
$childClass = new ChildClass();
echo $childClass->a.PHP_EOL;
$childClass->test();//ChildClass test
//不能和父类参数不一致Declaration of ChildClass::test2($var) should be compatible with ParentClass::test2()
//$childClass->test2('from child');
$childClass->getB();//b
$childClass->getC();//c
$childClass->getParent();//parnet
abstract class ParentClass{}
class ChildClass extends ParentClass{}
class ChildClass2 extends ParentClass{}
$childClass = new ChildClass();
var_dump($childClass instanceof ParentClass);//true
var_dump($childClass instanceof ChildClass2);//false

结论
1.子类的方法和属性权限必须>=父类
2.子类的方法参数个数必须和父类一样
3.子类可以定义
4.抽象类不能实例化
5.继承同一父类的两个子类进行instanceof 比较返回false

require 和require_once

出于效率考虑使用require.
require_once比require多加一个了过滤重复功能.效率肯定比较差点

读取小文件使用file_get_contents()代替fopen

读取小文件的时候使用file_get_contents()会将文件缓存到内存中–内存映射,能大幅提高性能.[高性能PHP应用开发]
我自己的测试结果是消耗时间和本身服务器状态有关,不一定每次都会file_get_contents比较快.这个我觉得可以记住,想到了就用不会有什么不好的

 $s = microtime(true);
//消耗时间6.9362108707428
7.7130241394043
/*
for ($i=0;$i<1000000;$i++){
file_get_contents(APP_PATH.'/public/index.php');
}
*/
//消耗时间7.1278259754181
7.7949500083923
for ($i=0;$i<1000000;$i++){
$handle = fopen(APP_PATH.'/public/index.php', 'r');
fwrite($handle, filesize(APP_PATH.'/public/index.php'));
}
$s2 = microtime(true);
echo $s2-$s.PHP_EOL;

参考

PHP与MySQL高性能应用开发
高性能PHP应用开发

最后

以上就是激情金毛为你收集整理的PHP基础注意点的全部内容,希望文章能够帮你解决PHP基础注意点所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部