你见过哪些令人瞠目结舌的php代码技巧?
时间:2021-07-01 10:21:17
帮助过:4人阅读
回复内容:
load 默认参数
$params += array(
'p1' => xx,
'p2' => xx
)
$handle = popen("tail -f /var/log/nginx/access.log 2>&1", 'r');
while(!feof($handle)) {
$buffer = fgets($handle);
echo "$buffer\n";
flush();
}
pclose($handle);
一看都变成了讲解如何进行php的优化了,我也说点。
1.单引号实现字符串的性能优化
这个我觉得没有必要。php不会因为这点小的性能消耗就被压垮了。而且也会出现一些其他的问题。我举个例子
$str = "you're";
$data = "I heard that {$str} getting married";
?>
我觉得这个时候,还是使用双引号更好一些。因为你字符串拼接的问题,还要php再次申请开启内存空间。同时还能避免出现一些奇葩问题。比如我们之前出现的这个问题。
$str = "you're";
$sql = "update article set content = '{$str}' where id = 1";
echo $sql; //update article set content = 'you're' where id = 1
?>
比如出现了这种情况。就会特别痛苦。 这是惨痛的教训。我还是还在补坑中。
2.尽可能的使用PHP函数,换一句话说意思就是尽量的减少代码行数,这样的一个好处就是说减少代码出现bug的量。
3. require_once 和 require 其实消耗差不多,那一点的差距真的不算大。等你写的文件需要这边加载那边加载,然后发现一不小心重复加载了一个类,然后造成冲突了。你就知道了require_once的好处了。
4.尽量不要随便的进行复制变量 因为这样php需要另外去开辟空间,这样的也话会耗费一些时间。虽然这些时间很少,但是我感觉这种完全可以避免掉。
5.在echo一个东西的时候尽量使用分号而不是点语法。我的解释是这样的,当用点语法的时候,php需要记性开辟更多的空间来存储这个变量,然后统一进行输出。而使用逗号的话,则使用了多次echo行为。这样的话。只是分为两次将变量输入到缓冲区。相对来说,点语法快了一点点。。。。但是这些都是一点点的性能损耗。
6.在php7之前的foreach其实是复制出一个副本出来,然后进行循环的。这个时候我还是建议使用array_map(), array_walk(), array_filter()等函数来处理你的问题。
7.$dir = dirname(dirname(dirname(__file__))); 这个的优化方法我给写的是:$dir = realpath(__DIR__ . '/../../'); 最后要确定的目录一定要存在,否则会返回false
8.一定要明白 == 和 === 的区别
9.不要使用__autoload 使用spl_autoload_register来代替。具体使用方法可以查询该函数
10.不要随便相信网上的那些php优化50则之类的东西。因为里面的有些东西可能是错的。在没有验证正确性的时候,不要随便转发给别人。现在网上的资料已经够乱的了。希望大家在确定真实性之后再去传播。
曾经写过的代码,有类似经历的来站队
就在刚才的空间里看到这个图片。
那我估计就是一个符号
@
非瞠目结舌,只是一点小技巧
- foreach效率更高,尽量用foreach代替while和for循环。
- 循环内部不要声明变量,尤其是对象这样的变量。
- 循环里别用函数
for($x=0; $x < count($array); $x)
//count()函数在外面先计算
告诉各位找嗔目结舌X的方法,去Stackoverflow
Highest Voted 'php' Questions
有多嗔目结舌我不知道,但我肯定你能学到很多东西,不要继续在这种问题上浪费生命。
1、autoload
spl_autoload_register(function($classname)
{
require_once("{$classname}.php")
});
2、php也有闭包
3、trait 就像个萃取器(我用过几次)
trait SayWorld
{
public function sayHello()
{
echo 'World!';
}
}
class MyHelloWorld
{
// 将SayWorld中的成员包含进来
use SayWorld;
}
$xxoo = new MyHelloWorld();
// sayHello() 函数是来自 SayWorld 构件的
$xxoo->sayHello();
4、php也有yield关键字
function number10()
{
for($i = 1; $i yield $i;
}
返回数组1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
5、飞船运算符Orz.. php7
就是类似windows api返回值的三元逻辑。
$a $b;
6、定界符
$name = 'kitty';
echo
{$name}
Eof;
?>
(注:一些内容来自网络)
大概就是那些利用反射玩出来的花样吧,不过不建议写没有详细文档说明的反射,后来的人会看不懂的
PHP: Variable variables
PHP: Magic Methods
PHP: spl_autoload