自学PHP,整理一些笔记
PHP笔记
1 概念
1.1 定义
PHP(外文名:PHP: Hypertext
Preproce+ssor,中文名:“超文本预处理器”)是一种通用开源脚本语言。
1.2 特点
- 语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP
独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。
- 用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;
- PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。
2 基础
2.1 PHP标记
1 2 3
| <? echo \"Hello, World!\" ?>
|
2.2 注释
2.2.1 行注释
2.2.2 块注释
2.3 变量
2.3.1 定义与调用
1 2
| $str=\"hello\"; echo \"$str\".\" world\" // 单点.表示字符串连接
|
2.3.2 可变变量
PHP中的变量名也可以是变量:
1 2
| $i=\"abc\"; $$i=\"xyz\"; // 此时,即 $abc=\"xyz\"
|
2.3.3 判断变量类型
is_integer($var)
is_string($var)
is_double($var)
is_array($var)
2.3.4 读取变量类型
2.3.5 设置变量类型
settype($var, \"string\")
2.3.6 判断变量是否定义
2.3.7 删除变量
unset($var)
unset($arr['...'])
unset($var1, $var2, ...)
2.3.8 预定义变量
2.3.8.1 $GLOBALS[]
全局范围有效
2.3.8.2 $_SERVER[]
$_SERVER['PHP_SELF']
$_SERVER['SERVER_ADD']
$_SERVER['SERVER_NAME']
$_SERVER['DOCUMENT_ROOT']
$_SERVER['SCRIPT_FILENAME']
$_SERVER['SCRIPT_NAME']
$_SERVER['HTTP_REFERER']
$_SERVER['REQUEST_URI']
2.3.8.3 HTTP处理
$_GET[]
$_POST[]
$_FILE[]
$_COOKIE[]
2.4 常量
2.4.1 定义常量
1 2
| define(STR, \"hello\"); // 字符串常量 define(SIZE, 100); // 数值常量
|
2.4.2 预定义常量
__FILE__
__LINE__
PHP_OS
PHP_VERSION
2.5 逻辑结构
2.5.1 if语句
1 2 3 4 5 6 7 8 9 10 11 12
| if(...) { statements } elseif(...) { statements } else { statements }
|
2.5.2 switch语句
1 2 3 4 5 6 7 8 9
| switch($var) { case 1: statements break; case 2: statements break; ... default: statements }
|
2.5.3 for语句
1 2 3 4
| for($i=0; i<10; i++) { statements }
|
2.5.4 while语句
1 2 3 4
| while(...) { statements }
|
2.5.5 do-while语句
1 2 3 4 5
| do { statements } while(...)
|
2.6 函数
2.6.1 自定义函数
1 2 3 4 5
| function func_name(params) { statements [return $param] }
|
2.6.2 系统函数
1
| function_exists(\"fopen\");
|
2.7 HTML与PHP交互
1 2 3 4
| <form name=\"form1\" method=\"POST\" action=\"form1.php\"> <input name=\"user\" type=\"text\"> ...more... </form>
|
2.8 会话 $_SESSION[]
2.8.1 概念
- session:从用户访问到关闭浏览器期间存在的会话
2.8.2 使用
1 2 3 4 5
| <? session_start(); $_SESSION['user']='USER1'; ?>
|
- 此变量在会话期间一直有效,可用于用户登录后,多个页面持续显示
2.9 文件 $FILES[]
1
| <input name=\"myfile\" type=\"file\" />
|
1 2 3 4 5 6 7
| $name=FILES['myfile']['name'] $name=FILES['myfile']['type'] $name=FILES['myfile']['size'] $name=FILES['myfile']['tmp_name'] $name=FILES['myfile']['error'] move_uploaded_file($FILES['myfile']['tmp_name'], $dest_filename)
|
3 数组 array
3.1 定义与调用
1 2
| $arr=array('a', 'b', 'c');
|
1 2 3 4
| $arr=array('server'=>\"apache\", \"os\"=>\"windows\", \"db\"=\"MySQL\"); /* arr[0~2]或arr['server'] */
|
3.2 compact
1 2 3
| $num=1; $arr=array('a', 'b'); $new_arr=compact(\"num\", \"arr\");
|
3.3 combine
1 2 3
| $keys=(1,2,3); $values=('a', 'b', 'c'); $keyvalue_arr=combine($keys, $values);
|
- combine合并
$key_arr
和$value_arr
为新的键值对应数组
3.4 foreach
1 2 3 4
| foreach($arr as $per_value) { statements }
|
1 2 3 4
| foreach($arr as $key=>$value) { statements }
|
3.5 print_r
1 2
| echo \"<pre>\"; print_r($arr);
|
- 通常在print_r之前输出
<pre>
,HTML预解析,保留原格式。
3.6 count
1 2 3 4
| for($i=0; $i<count($arr); $i++) { statements }
|
3.7 array_chunk
1
| array_chunk($arr, $chunk_size, $preserve_key);
|
- 将
$arr
中的元素分为每$chunk_size
个一组。
3.8 array_merge
1
| array_merge($arr1, $arr2, ...);
|
3.9 current
3.10 next
- 获取array读写位置的下一项,并移动读写指针到下一项
3.11 prev
- 获取array读写位置的前一项,并移动读写指针到前一项
3.12 end
- 获取array读写位置的最后一项,并移动读写指针到最后一项
3.13 reset
3.14 sort
- 对
$arr
执行排序(依据value排序,重建key(1,2,3,...))
3.15 rsort
- 对
$arr
执行逆向排序(依据value排序,重建key(1,2,3,...))
3.16 asort
- 对
$arr
执行排序(依据value排序,保留key-value映射)
3.17 ksort
3.18 shuffle
3.19 array_reverse
3.20 range
1
| $arr=range($low, $high[, $step]);
|
- 根据范围建立array,建立从低到高(步长默认为1)的
$arr
3.21 array_push
3.22 array_pop
3.23 array_change_key_case
1
| array_change_key_case($arr, CASE_UPPER/CASE_LOWER);
|
3.24 array_intersect
1
| array_intersect($arr1, $arr2, ...);
|
3.25 array_diff
1
| array_diff($arr1, $arr2, ...);
|
3.26 array_diff_assoc
1
| array_diff_assoc($arr1, $arr2, ...);
|
3.27 array_flip
1
| $fliped_arr=array_flip($arr1);
|
3.28 array_fill
1
| $arr=array_fill($start_idx, $count, $fillvalue);
|
- 从
start_idx
开始,用$fillvalue
填充$count
个元素
3.29 array_count_values
1
| $count=array_count_values($arr);
|
3.30 array_key_exists
1
| $bool=array_key_exists($key, $arr);
|
3.31 array_keys
3.32 in_array
1
| $bool=in_array($value, $arr);
|
3.33 array_map
1
| array_map(\"func_name\", $arr);
|
3.34 key
4 字符串 String
4.1 explode
1
| $arr=explode($seperator, $str[, $count]);
|
4.2 implode
1
| $str=implode($seperator, $arr);
|
4.3 strcmp
4.4 str_replace
1
| str_replace($search, $replace, $str);
|
- 将
$str
的$search
部分替换为$replace
部分
4.5 print
4.6 sprintf
1
| sprintf($format_str, $args);
|
$format_str
即包含%d
,
%s
的格式化字符串
4.7 substr
1
| substr($str, $start_idx, $args);
|
4.8 ltrim
4.9 rtrim
4.10 trim
1 2
| trim($str); trim($str, $char);
|
4.11 strlen
4.12 strtolower/strtoupper
1 2
| strtolower($str); strtoupper($str);
|
4.13 htmlentities
4.14 html_entity_decode
1
| html_entity_decode($str)
|
4.15 str_repeat
1
| $repeated_str=str_repeat($str, $times);
|
4.16 parse_str
4.17 str_split
1
| str_split($str, $length);
|
4.18 md5
4.19 sha1
5 日期及时间 Date&Time
5.1 date
1
| $date_str=date($format[, $timestamp]);
|
5.2 mktime
1
| $timestamp=mktime($hour, $minute, $second, $month, $day, $year);
|
5.3 getdate
1
| $arr=getdate([$timestamp]);
|
5.4 checkdate
1
| checkdate($month, $day, $year);
|
6 文件及目录 File&Dir
6.1 opendir
1
| $dirhandle=opendir($path);
|
6.2 closedir
6.3 readdir
1
| $filename=readdir($dirhandle);
|
6.4 scandir
1
| $file_list=scandir($path);
|
6.5 getcwd
- 取得当前工作目录(current working directory)
6.6 chdir
6.7 mkdir
6.8 rmdir
6.9 fopen
1 2
| $filehandle=fopen($filename, $mod); $filehandle=fopen($url, $mod);
|
6.10 fclose
6.11 feof
6.12 fgets
1 2
| $line=fgets($filehandle); $line=fgets($filehandle, $size);
|
另:
1 2 3
| readfile file get_file_contents
|
6.13 fwrite
1
| fwrite($filehandle, $content[, $length]);
|
另:
1 2
| fputs file_put_contents($filename, $data);
|
6.14 filexxx
1 2 3
| fileowner($filename); filesize($filename); filetype($filename);
|
6.15 is_xxx
1 2 3 4
| is_dir($filename); is_file($filename); is_readable($filename); is_writeable($filename);
|
6.16 basename
6.17 dirname
6.18 copy
6.19 unlink
6.20 rename
1
| rename($oldname, $newname)
|
6.21 chxxx
1 2 3
| chgrp($filename, $grp); chmod($filename, $mod); chown($filename, $user);
|
6.22 flock
1
| flock($filehandle, $operation);
|
$operation
LOCK_SH
读锁定,共享锁
LOCK_EX
写锁定,互斥锁
LOCK_UN
释放,解锁
LOCK_NB
锁定时不阻塞
6.23 filextime
1 2 3
| fileatime($filename); filemtime($filename); filectime($filename);
|
7 HTTP
7.1 fopen
1
| $filehandle=fopen($url, $mod);
|
7.2 fgetss
1
| $str=fgetss($url, $mod);
|
7.3 urlencode/urldecode
1 2
| $str=urlencode($str); // 非字母或数字的字符编码为 %+2位十六进制表示 $str=urldecode($str); // 编码为可读url字符串
|
7.4 parse_url
$arr['key']
key
scheme
host
port
user
pass
path
query
fragment
- 修改HTTP头部
- 由
print_r($_SERVER)
可读取
7.6 setcookie
1
| setcookie($name[, $value, $expire, $path, $domain, $secure]);
|
expire
cookie生命值倒计时, 通常用
time()+n
单位秒
$path
cookie的有效路径
$domain
cookie的有效域名
$secure
是否当https时才有效
读取时,可用 $_COOKIE[$name]
读取
8 系统信息
8.1 getenv
$key
:
DOCUMENT_ROOT
SERVER_ROOT
SCRIPT_NAME
HTTP_USER_AGENT
REQUEST_METHOD
SERVER_PROTOCOL
8.2 putenv
1
| putenv(\"$key=$value\");
|
8.3 get_loaded_extensions
1
| $arr=get_loaded_extensions();
|
8.4 get_extension_funcs
1
| $arr=get_extension_funcs($module);
|
8.5 phpinfo
8.6 getmypid
8.7 get_current_user
9 数学
9.1 计算
1
| abs/floor/round/ceil/exp/pow/sqrt
|
9.2 转换
1 2 3
| decbin/dechex/decoct bindec/hexdec/octdec base_convert
|
9.3 随机数
10 数据库 MySQL
10.1 总例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| $conn=mysql_connect($server, $user, $password); if(!conn) die('no connection'.mysql_error());
mysql_select_db('test');
$result=mysql_query($sql);
$row=mysql_fetch_array($result, MYSQL_ASSOC); $row_count=mysql_num_rows($result); $count=mysql_affected_rows(); fields=mysql_fetch_field();
mysql_close($conn);
|
11 面向对象程序设计 OOP
11.1 总例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| <?php
class Person { private $name; public function __construct($name=NULL) { if($name) { $this->name=$name; } } public function __destruct() { echo 'destructing object' } public function getName() { return $this->name; } public function setName($name) { $this->name=$name; } }
class Student extends Person { private static $count; private $school; public function __construct($name, $school) { parent::__construct($name); $this->school=$school; } public function setSchool($school) { $this->school=school; } public getSchool() { return $this->school; } public static function counts() { self::$count++; } public static function getCount() { return self::$count; } }
$stu=Student(); echo $stu->getName();
?>
|
11.2 Magic Methods
类的特殊方法(function)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| __construct(); __destruct();
__get($name); __set($name, $value);
__call();
__tostring();
__clone();
$obj=new Obj; $obj_cloned=clone $obj;
|