日常工作都在用 Java 了,需要懂一点PHP么?
- 创世应用,是用PHP写的哟,了解下背景,也许用的上
- 工作之余,写点小玩意儿,也许用的上
以下仅讨论Web开发领域
语言只是一个工具
语法篇
PHP作为一门弱类型、解释执行的服务器脚本语言,类似于C,上手快。
<?php
// 标记php语言
// ' 与 '' 均可
echo 'php is the best language';
/* 长段可换行注释 */
echo "hello, world!";
// 可以无结束符号
常量
define("HELLO", "hello,world!");
const HELLO = "hello,world!";
变量
弱类型,无需声明变量类型
// int / integer
$var = 1;
// bool / boolean
$var = true;
// float / double
$var = 1.1;
// string
$var = 'hello,world!';
// array
$var = [1, 1.1, 'hello,world!'];
// 不支持 map set list
// 万物皆array
$var = ['id' => 1, 'name' => 'xu42', 'age' => 18, 'extension' => ['school' => 'known']];
// NULL
$var = null;
$var = NULL;
// object
class foo
{
function hello()
{
echo "Hello.";
}
}
$bar = new foo; //or $bar = new foo();
// callback
class MyClass {
public static function myCallbackMethod() {
echo 'Hello World!';
}
}
call_user_func(array('MyClass', 'myCallbackMethod'));
方法
class Hello {
public function process($first) {
echo 'first';
}
// 这是非法的,不允许存在同名方法
public function process($first, $two) {
echo 'first';
}
// 通过
}
异常
通过 error_reporting() 方法来声明报错等级。
通过 set_exception_handler() 方法来注册自定义的全局异常处理方法。
Fatal Error
致命错误,直接影响运行时,程序中断运行。一般是语法错误、资源问题等。
Throwable
基类
Error 错误
PHP内部错误类的基类
计算、断言、解析、类型等
Exception 异常
运行时(栈溢出、越界、数据库连接)、反射等
框架篇
相较于 Spring 全家桶 一统 Java 框架,PHP的框架是百花齐放。
Yaf、Swoole、ZanPHP、Slim、Codeigniter、Symfony、Yii2、Laravel、ThinkPHP
组件篇
如何使用组件/三方包
PHP组件使用 composer
类似于 Java 的 maven
各组件通过命名空间来区分
// 在项目目录下执行命令 引入一个三方包,也可以直接编辑composer.json文件进行添加、更新或删除操作 composer require 'xu42/china-same-name' // 更新三方包 composer update
如何写一个组件
这里通过引入一个三方包,来做一个同名查询的服务。
本地执行
php bin.php 张伟
<?php
$name = implode(' ', array_slice($argv, 1));
$name = empty($name) ? '张伟' : $name;
echo "你要查询{$name}的同名人数" . PHP_EOL;
include 'vendor/autoload.php';
$count = \Xu42\ChinaSameName\ChinaSameName::count($name, 'henan');
echo "\t河南:" . $count . PHP_EOL;
$count = \Xu42\ChinaSameName\ChinaSameName::count($name, 'henan.pingdingshan');
echo "\t河南平顶山:" . $count . PHP_EOL;
$count = \Xu42\ChinaSameName\ChinaSameName::count($name, 'zhejiang');
echo "\t浙江:" . $count . PHP_EOL;
$count = \Xu42\ChinaSameName\ChinaSameName::count($name, 'zhejiang.hangzhou');
echo "\t浙江杭州:" . $count . PHP_EOL;
HTTP 服务
curl "http://127.0.0.1:8000/api.php?name=张伟&area=henan"
<?php
error_reporting(0);
$name = $_GET["name"];
$name = empty($name) ? '张伟' : $name;
$area = $_GET["area"];
$area = empty($area) ? 'henan' : $area;
include 'vendor/autoload.php';
echo json_encode([
'count' => \Xu42\ChinaSameName\ChinaSameName::count($name, $area)
]);
实战篇
写一个PHP组件 - 一个小爬虫 - 跟你重名有几人?
源码奉上:https://github.com/xu42/china-same-name