PHP基础知识
PHP使用<?php ... ?>内嵌于html中, 使用echo输出html语句. 例如:
Order processed.';?>
通常, 在form表单中获取的变量值存储在$_POST, $_GET, $_REQUEST. 其中submit为GET存储在$_GET中, 为POST存储在$_POST中, 默认都存储在$_REQUEST中.
而PHP中变量以"$"开头.
一个实际例子:
orderform.html:
info.php:
Your order is as follows: '; echo $tireqty.' tires'; echo $oilqty.' bottles of oil'; echo $sparkqty.' spark plugs'; ?>
这里, 变量和字符串使用点号(".")进行连接. 而如果在双引号中, 则变量会被解释, 例如:
echo $tireqty.' tires';
等价于:
echo "$tireqty tires";
但单引号中一切都认为是字符串.
使用define语法定义常量:
define('PI', 3.1415926);
理解PHP变量:
$GLOBALS: 全局变量数组.
$_SERVER: 服务端变量数组.
$_GET: 使用GET方法传递过来的变量.
$_POST: 使用POST方法传递过来的变量.
$_COOKIE: 所存储的cookie变量数组.
$_ENV: 环境变量数组.
$_REQUEST: $_GET/$_POST/$_COOKIE的集合.
$_SESSION: session变量的数组.
在变量引用方面, PHP使用"&"来解决:
$a = 5;$b = $a;$a = 7; // $b依旧等于5
而如果使用了"&":
$a = 5;$b = &$a;$a = 7; // 则$b也等于7
使用unset来解除变量所关联的引用:
unset($a);
在``字符内可填写: 可执行的操作:
$out = `ls -la`;echo ''.$out.'';
而instanceof用于判断一个对象是否是一个特定类的实例:
class sampleClass{};$myObject = new sampleClass();if ($myObject instanceof sampleClass) echo "myObject is an instance of sampleClass";
使用gettype/settype来读取/设置变量的类型:
$a = 56;// integerecho gettype($a).'';settype($a, 'double');// doubleecho gettype($a).'';
而PHP也提供了如下函数用于判断变量类型:
is_array()/is_double()/is_float()/is_real()/is_long()/is_int()/is_integer()/is_string()/is_bool()/is_object()/is_resource()/is_null()/is_scalar()/is_numeric()/is_callable()
三个特殊的测试函数:
isset(): 判断变量是否存在.
unset(): 删除变量.
empty(): 判断变量是否为空.
使用数组
使用array进行数组的初始化:
$arr = array(1, 2, 3, 4, 5);
而循环数组既可以使用for, 也可以使用foreach:
$arr = array(1, 2, 3, 4, 5);for ($i = 0; $i < count($arr); $i++) { echo $arr[$i].' ';}echo '';foreach($arr as $item) { echo $item.' ';}
但PHP的数组实际上为一个map结构.
$arr = array(1, 2);
实际上存储为:
$arr = array("0" => 1, "1" => 2);
而map型结构, 可使用如下的循环: foreach/each/list
$arr = array("a" => 1, "b" => 2);foreach($arr as $key => $value) { echo $key.' => '.$value.' ';}echo '';reset($arr);while ($ele = each($arr)) { echo $ele['key'].' => '.$ele['value'].' ';}echo '';reset($arr);while (list($key, $value) = each($arr)) { echo $key.' => '.$value.' ';}
关联数组的函数
使用sort函数对数组进行排序:
$arr = array('Tires', 'Oil', 'Spark Plugs');sort($arr);foreach($arr as $key => $val) { echo $key.' => '.$val.'';}
而sort函数支持第二个参数, 用于排序的判断: SORT_REGULAR, SORT_NUMERIC, SORT_STRING.
但如果针对的是map型数组, 则可使用asort(根据value进行排序)和ksort(根据key进行排序):
$arr = array('Tires' => 100, 'Oil' => 10, 'Spark Plugs' => 4);asort($arr);// Spark Plugs => 4 Oil => 10 Tires => 100 foreach($arr as $key => $val) { echo $key.' => '.$val.' ';}echo '';ksort($arr);// Oil => 10 Spark Plugs => 4 Tires => 100foreach($arr as $key => $val) { echo $key.' => '.$val.' ';}echo '';
反序情况下, 使用rsort()/arsort()/krsort()即可.
乱序可使用shuffle().
字符串操作和正则表达式
使用trim()/ltrim()/rtrim()去除字符串的空白字符.
strtoupper: 将字符串转为大写.
strtolower: 将字符串转为小写.
ucfirst: 将字符串的第一个字母大写.
ucwords: 将字符串中的每个单词的第一个字母大写.
explode进行字符串的分割存储于数组, 而implode/join将数组合并成字符串.
$content = "hello,world";$arr = explode(',', $content);// hello worldfor ($i = 0; $i < count($arr); $i++) { echo $arr[$i].' ';}echo '';$con = implode(',', $arr);// hello,worldecho $con;
substr(string str, int start[, int length]): 获取子字符串.
strcmp()/strcasecmp()/strnatcmp(): 比较字符串.
strlen(): 获取字符串的长度.
字符串中查找子串: strstr()/strchr()/strrchr()/stristr()
strpos()/strrpos()
替换字符串: str_replace()/substr_replace()
复用代码和编写函数
在PHP中可以使用require()或者include()来复用代码. require()和include()差不多, 唯一的区别在于当失败时候, require()提示错误, 而include()则仅仅警告.
require_once()/include_once()只加载一次文件.
reusable.php:
';?>
test.php:
'; require('reusable.php'); echo 'The script will end now.';?>
浏览器显示:
This is the main file.Here is a very simple PHP statement.The script will end now.
PHP中, 定义函数的格式为:
function func(){ // ...}
传参部分, 也支持传递默认参数:
function my_function($arg1, $arg2=2, $arg3=4) { echo 'arg1:'.$arg1.''; echo 'arg2:'.$arg2.''; echo 'arg3:'.$arg3.'';}my_function(111, 333);
理解作用域
函数内声明的变量为局部变量.
函数外声明的变量为全局变量.
超级全局变量(例如$_POST等)不分局部全局.
使用require()仅仅只是内嵌文件, 并不会影响作用域.
关键字global用于定义全局变量.
变量可以使用unset()进行删除.
function fn() { global $var; $var = 'content';}fn();echo $var;
传参通常分为传值和传引用. 正常情况下传值, 特殊要修改传入的参数, 则传引用, 参数前加"&"即可.