第4课:PHP基础应用

不能免俗的介绍下PHP的数据类型,常用函数与流程控制语句,这些是组成PHP的基础,就像每天都要吃饭一样基础,俗话说的好,一屋不扫何以扫天下
掌握了这一节的内容,就可以写基本的PHP程序了

1. PHP文件开始结束符
<?php
    //这里写PHP代码,注释用双斜线
?>
(一个PHP文件结尾的?>可以省略)

2.PHP的身份符号:$
变量都是用$作为开头
举例:变量a 赋值10  <?php $a = 10; ?>

变量引用
$b = &$a; //&表示变量的引用,此后改变$a, $b任何一个变量的值,两个同时改变

3.PHP函数
<?php
function 函数名(参数) {
    //操作
    return 返回值;
}
?>
函数返回值用json格式的比较多一点,json_encode json_decode也是很好用的函数
php5.4以后的json_encode还加强了功能
json_encode($arr, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT); 
JSON_UNESCAPED_UNICODE用来保证json字符串中的中文不被编码,JSON_PRETTY_PRINT是对json字符串格式的美化

PHP自带的函数功能也很强大,具体可以查看手册
比如
针对字符串操作的 strtok strpos
针对数组操作的 array_search  array_pop  array_unique 
array_walk_recursive 这个函数的作用还是很大的,对数组中的每个成员递归地应用用户函数,可以直接用一个函数处理一个数组的每个元素,不需要循环

而且函数的参数也要注意,多一个参数,可能结果完全不同
<?php
    echo mb_substr('我们都喜欢www.godeye.org', 0, 9);
?>
输出:我们都

现在我们加上字符集utf-8
<?php
    echo mb_substr('我们都喜欢www.godeye.org', 0, 9, 'utf-8');
?>
输出:我们都喜欢www.

当然了,PHP函数也不是完美的,比如pathinfo函数,现在还不完善,如果一个文件是纯中文名字[其实是因为中文开头],用pathinfo解析出来文件名会为空
这个时候就需要一些字符的截断过滤处理来获取文件名
同时pathinfo经常和parse_url函数经常结合使用,单独一个函数很难满足所有需求
在这里,提供一个对文件重命名的函数,如果这个函数能看懂,对PHP函数的认识就会深刻很多
<?php
function rename($path) {
        $url = parse_url($path);
	$finfo = pathinfo($url['path']);//这里简单用pathinfo处理,优化自己动手来完成
	if (($len = strlen($finfo['filename'])) && $len > 3 && $finfo['filename'][$len - 3] == '(' && is_numeric($finfo['filename'][$len - 2]) && $finfo['filename'][$len - 1] == ')') {
		$finfo['filename'] = substr($finfo['filename'], 0, $len - 2 ) . (intval($finfo['filename'][$len-2]) + 1) . ')';
	} else {
		$finfo['filename'] .= '(1)';
	}
	$path = $finfo['dirname'] != '.' ? $finfo['dirname'] . '/' : '';
	$path .= $finfo['filename'];
	isset($finfo['extension']) && ! empty($finfo['extension']) && $path .= '.' . $finfo['extension'];
	return $path;
}
?>

4.PHP类
<?php
class Test {
}
$test = new Test();//调用
?>
类顾名思义,就是对一些操作进行归类,方便维护而已,没有什么高深的用途,后面章节会专门对类进行说明

5.变量或函数命名规则
纯英文
切合项目有意义
推荐驼峰命名法:第一个单词以小写字母开始;第二个单词的首字母大写或每一个单词的首字母都采用大写字母  例:$tuoFeng

6.常用数据类型
整形 例 $int = 1; 定义了一个整形变量$int值为1
字符型  $string = 'www.godeye.org' 当然也可以用双引号 ""
浮点型  $float  = 11.11
布尔型  true|false
数组    $array  = array(1, 'Godeye', 2) 或 $array  = array(0 => 1, 1 => 'Godeye', 2 => 2)
对象    $object = stdClass Object(1, 'GODEYE', 2) 

7.强制类型转换
用括号加数据类型的方式强制转换
$array = (array)$object  对象转为数组
还有一种情况会自动强制类型转换,比如 $a是一个布尔型 但是和字符串拼接 'string' . $a 这个时候$a就会被转换,按照最左边的数据类型转换

8.运算符
$a == $b  只判断值是否相等
$a === $b 不仅判断值是否相等,还判断数据类型是否一致

其他:!= < > <= >= <> 

逻辑运算符:
逻辑与 && 两边都为真才是真
逻辑或 || 任何一个为真都是真
逻辑非 !  真变假 假变真
逻辑异或 xor 一真一假才为真,其余都是假

位运算:
$a<<$b 讲$a中的位向左移动$b次(每一次移动都表示乘以2)

三元运算符:
格式 条件?真:假
$a = 10;
$res = $a > 10 ? '聪明' : '笨蛋';
echo $res;//输出笨蛋

9.流程控制语句
条件判断
<?php
if () {
} elseif () {
} else {
}
?>

switch判断
<?php
switch ($type) {
    case 1:
        //操作
        break;
    ....
    default:
        //操作
	break;
}
?>

多重判断尽量用switch语句,简单的判断用if else 原因在于switch的运作方式更先进,会根据type值直接跳转到对应的case,而不是if else那样一层层遍历判断

循环语句
<?php
while (表达式) {
    //操作
}
当表达式为真,执行操作

do {
    //操作
} while(表达式)

for ($i = 0; $i < 10; $i++) {
    //循环操作10次
}
?>

针对数组遍历
<?php
foreach ((array)$array as $k => $v) {
    print_r($v);
}
?>