记得第一次接触PHP是在大学宿舍,当时为了追妹子想做个表白网站。结果妹子没追到,倒是和PHP纠缠了十几年。今天就跟你们唠唠这个让人又爱又恨的语言。
先说说环境搭建这个坑。当年用XAMPP装环境,硬是把C盘塞爆了。现在用Docker多香,给你们看看我的docker-compose.yml配置:
version: '3'
services:
php:
image: php:8.1-fpm
volumes:
./:/var/www/html
nginx:
image: nginx:alpine
ports:
"8080:80"
./nginx.conf:/etc/nginx/conf.d/default.conf
注意,这里有个大坑是文件权限问题。Linux下经常遇到Permission denied,得chmod -R 777一下(别学我,生产环境别这么干)。
说到PHP基础语法,最骚的就是变量前面那个$符号。刚开始写代码的时候,总忘记加这个符号,然后就看到满屏的undefined variable。后来养成了肌肉记忆,连做梦都是$符号满天飞。
数组操作是PHP的灵魂技能。看看这些骚操作:
// 传统写法
$arr = array('a', 'b', 'c');
// 5.4+的简写
$arr = ['a', 'b', 'c'];
// 关联数组
$user = [
'name' => '张三',
'age' => 25,

'girlfriend' => null
];
说到这想起来,PHP7的null合并运算符??真是救星。以前要写:
$name = isset($_GET['name']) ? $_GET['name'] : 'anonymous';
现在直接:
$name = $_GET['name'] ?? 'anonymous';
数据库操作这块,PDO是必须掌握的。别再用mysql_那些被废弃的函数了,除非你想被同行笑话。来段标准操作:
try {
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'password');
$stmt = $pdo->prepare('SELECT
FROM users WHERE age > :age');$stmt->execute([':age' => 18]);
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
die('数据库挂了:' . $e->getMessage());
}
这里有个坑要注意,PDO默认不报错,得设置ERRMODE_EXCEPTION才会抛出异常。没设置的话,SQL语句错了也不告诉你,跟暗恋似的,憋着不说。
说到框架,Laravel现在是大热门。但刚入门建议从原生PHP开始,不然你连Composer是啥都不知道就上框架,跟没学会走路就想跑马拉松一样。给你们看看我用Laravel写的路由:
Route::get('/user/{id}', function ($id) {
return 'User '.$id;
})->where('id', '[0-9]+');
Route::post('/login', 'AuthController@login');
这语法糖甜得齁人,但底层原理得搞明白。建议看看Illuminate/Routing这个包,研究下服务容器和中间件机制。
性能优化这块,OPcache必须安排上。php.ini里加上这几行:
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
这样性能直接起飞,比喝红牛还提神。
调试技巧也很重要。xdebug配好了是真香,但配置过程能让人崩溃。给你们看看我的配置:
[xdebug]
zend_extension=xdebug.so
xdebug.mode=debug
xdebug.client_host=localhost
xdebug.client_port=9003
xdebug.start_with_request=yes

配完记得重启php-fpm,不然改了个寂寞。还有,PHPStorm里要配置好对应的端口,不然断点打不上,急得你想砸键盘。
安全方面,SQL注入是老生常谈了。除了用PDO预处理,输入过滤也很重要。filter_var函数了解一下:
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
if (!$email) {
die('邮箱格式不对,你是想黑我网站?');
}
XSS防护也得做,htmlspecialchars是基本操作:
echo htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');
最近在玩PHP8的新特性,JIT编译器是真带劲。虽然对普通Web应用提升不大,但做数学计算之类的能快不少。match表达式也比switch优雅:
$status = match($code) {
200 => 'OK',
404 => 'Not Found',
500 => 'Server Error',
default => 'Unknown'
};
最后说个真实案例。之前做项目遇到个诡异问题:文件上传偶尔失败。debug了三天三夜,发现是php.ini里upload_max_filesize和post_max_size设置不一致。这种坑踩过才知道疼。
PHP这语言,被黑是常态。但你看GitHub上多少项目还在用PHP,WordPress、Facebook(早期)、Wikipedia不都活得好好的。关键是把语言特性吃透,写出健壮的代码。
对了,最近在搞Swoole,用PHP写高性能服务器真刺激。等我把坑都踩完了,下次再跟你们细聊。
372



被折叠的 条评论
为什么被折叠?



