PHP一些实用小技巧

Freigeben: 2023-04-08 13:04:02
nach vorne
2270 人浏览过

PHP一些实用小技巧

1、字符串类型数字转数字类型

$str = '123';
//方法一
(int)$str;
//方法二
intval($str);
//方法三
+$str;
Nach dem Login kopieren

方法一和方法二是强制转换,即使字符串数字后含有字母。方法三则必须保证是纯数字字符串,否则报错。

推荐:《php培训

2、数组添加元素

$arr = ['a'];
//方法一
array_push($arr,'b', 'c');
//方法二
$arr[] = 'd';
Nach dem Login kopieren

1、如果是压入一个元素,使用方法二效率高,因为可以节省调用函数的额外负担。

2、如果同时压入多个元素,使用array_push效率高,因为不用重复获取文件尾的指针。

3、for循环

//正常写法
for($i = 0; $i < count($arr); $i++){
	//
}
//优化一
for($i = 0, $len = count($arr); $i < $len; $i++){
	//
}
//优化二
for($i = count($arr) - 1; $i > -1; --$i){
	//
}
Nach dem Login kopieren

优化一:这个问题在于条件判断每次都要计算数组的长度,不如一开始声明一个变量存入。其他语言for循环大概同理吧…

优化二:在不需要从小到大的情况下,可以节省一个$len变量。还有就是--$i比$i--要快这个小优化。

总结:也不是说优化二就一定好,我只是想到这个写了出来。不过一个好的for循环我觉得起码还是要注意到优化一这个的,另外$i++可以改成++$i嘛!

4、foreach遍历

//写法一
foreach($arr as $k => $v){
	//
}
//写法二
foreach($arr as $v){
	//
}
//写法三
foreach($arr as &$v){
	//	
}
//写法四
$arr = [
	[1,2,3],
	[4,5,6]
];
foreach($arr as list($a,$b,$c)){
	//
}
Nach dem Login kopieren

1.首先你要知道一个事儿,写法一和写法二里$v是不取址的,$v是键值的拷贝。所以别在foreach里更改数组/对象本身,没有用。

2.不需要键名或者索引的时候,别写$k这个事没啥好说的。

3.关于写法三取址引用赋值这个,好处是在当值很大的时候节省空间。但是要注意的是,无论哪种写法,$v在foreach循环之后都会保留,这个时候如果你是取址的写法,那么再次使用$v可就坏事了,手册是建议unset($v)。

4.写法四是针对于二维数组/对象的应用,使用list对键值数组进行解包。注意list内接收的变量数多于实际二维数组内的长度会报错,少于可以只是接收不到,所以要使用时还是要考量一下。

5、关于null判断

//写法一
is_null($a);
//写法二
$a === null
Nach dem Login kopieren

两种写法写法效果是完全一样的,使用方法二节省函数调用。
另外能用===就别用==了。

6、多个判断

$a = 1;
//写法一
if($a === 0){
	//
}elseif($a === 1){
	//
}else{
	//
}
//写法二
do{
	if($a === 0){
		//
		break;
	}
	if($a === 1){
		//
		break;
	}
	//
}while(false);
//写法三
switch(true){
	case 0:
		//
		break;
	case 1:
		//
		break;
	default:
		//
}
Nach dem Login kopieren

7、list妙用

//妙用一
list($a,$b) = [$b,$a];
//妙用二
list(,$fn) = explode('_','Api_deleteUser');
Nach dem Login kopieren

8、英文字符串长度超限

//一般方式
strlen($str) > 10;
//优化方式
isset($str[10]);
Nach dem Login kopieren

isset是PHP语句,strlen是函数。

9、null判断赋值几种写法

//当$a不为null时$b = $a,否则$b = 233333。
//方式一
$b = $a or $b = 233333;
//方式二
$b = $a ? $a : 23333;
//方式三
$b = $a ?: 233333;
//方式四,PHP7
$b = $a ?? 233333;
Nach dem Login kopieren

注意区分方式三和方式四的区别,明确自己到底想判断啥。除了方式四,其他三种还可以判断false,'','0',0,[]的情况。

10、两个变量交换

//方式一:比较清晰,有变量产生
$temp = $a;
$a = $b;
$b = $temp;
//方法二:比较清晰,但也会产生临时变量
list($b, $a) = [$a,$b];
//方式三:在整数运算时互逆运算比较靠谱,但+ – * /可能精度丢失或溢出
$a = $a + $b;
$b = $a - $b;
$a = $a - $b;
Nach dem Login kopieren

11、避免使用递归

//递归
function fibonacci($n){
	if($n == 0 || $n == 1){
		return 1;
	}
	return fibonacci($n - 1) + fibonacci($n - 2);
}
//非递归
function fibonacci($n){
	$arr = [1,1];
	for($i = 2; $i < $n + 1; ++$i){
		$arr[] = $arr[$i - 1] + $arr[$i - 2];
	}
	return $arr[$n];
}
Nach dem Login kopieren

12、不要省略if后的大括号

//写法一
if($a === null) $a = 1;
//写法二
if($a === null)
	$a = 1;
//写法三
if($a === null){
	$a = 1;
}
//如果可以避免写if更好
$a = $a ?? 1;
Nach dem Login kopieren

13、使用$_SERVER[‘REQUEST_TIME’]代替time().

后者会引来一次函数调用, 而如果对时间的精确值要求不高,前者快很多.

14、少用/不用continue

continue是回到循环的头部, 而循环结束本来就是回到循环的头部, 所以通过适当的构造, 我们完全可以避免使用这条语句, 使得效率得到改善.

15、变量先定义后使用

使用一个未定义的变量, 比使用一个定义好的变量要慢8倍以上!

PHP引擎会首先按照正常的逻辑来获取这个变量, 然而这个变量不存在, 所以PHP引擎需要抛出一个NOTICE,进入一段使用未定义变量时应该走的逻辑, 然后返回一个新的变量.

16、关于命名

根据PSR规范,方法须使用小驼峰式。

根据PSR规范,类的命名须为大驼峰式。

变量的命名在规范里没有明确,项目内统一。(下划线式还是易懂一些)

布尔变量尽量使用can、is、has开头。

17、避免使用正则

18、用大括号括起在双引号和heredoc中的变量

更多编程相关内容,请关注php中文网编程教程栏目!

相关推荐:

PHP视频教程,学习地址://m.sbmmt.com/course/list/29/type/2.html

以上是PHP一些实用小技巧的详细内容。更多信息请关注PHP中文网其他相关文章!

Verwandte Etiketten:
php
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!