周末, 冲杯咖啡, 好好看看PHP玩玩. :)
基础知识
- PHP就是HTML基础上插入php语句块的语言.直观变为html.所以PHP输出时经常要带标签,
, 
一类. <?php ....?>
PHP语法代码块.会被翻译处理后成HTML处理.- 必须语句分隔符:
;
,除了最后一句,基本是必须的,因为PHP是HTML类似的紧凑型的排版.单独一个;
可以代替空语句. - 三种注释:
//
以及#
行注释,/*...*/
块注释. - PHP对类名,函数,关键词大小写不敏感,但是对变量名敏感.
- 宽松型语法,经常有多表达支持.例如数组元素$arr[n],$arr{n}都可以.
- 语法有点bash和现代类c语言的混杂..
- 输出大于和小于号请用
>
和<
. include fname
可以插入某文件内容,例如样式,php脚本等.require fname
有相同功效. 前者在出错后脚本继续运行,后者则出错后就终止运行.exec( string $command [, array &$output [, int &$return_var ]] )
执行外部命令,返回输出的最后一行.die(n)/exit(n)
退出脚本.返回n.0是正常结束,1-254可用作非正常结束.如果n是字符串则在退出前输出字符串.
数据类型,变量,运算比较等基础元素
- 宽松的类型, 所以不需要声明变量类型.
- 字符串: 字符串用
".."
(变量翻译)或'..'
(变量保持原表示). 串接用.
, 支持$str.=$str2
追加. 字符串函数请参考Ref2. - 整型int(支持10进,0xFF 十六进和 033 八进)和浮点float.
- 逻辑bool,就是
true false
. - NULL型 null,可以清空变量,不同于
""
空串. - object对象型和array数组型.
- 字符串: 字符串用
- 变量赋值(定义同时赋值):
$varname=value
.变量分global
(只能函数外调用,函数内调用不能,这点和别的不太一样),local
(函数内)和static
(需要额外用关键词声明,生命期长local,一直存在).函数内调用函数外变量:global $var
声明 或者$GLOBAL['var']
(全局变量数组). unset($var)
注销变量或数组,不能注销常量.- 常量调用直接用名字,如
M_PI
.是全局的不能变不能撤销的.用define(name,value,大小写敏感不)
定义. - 超全局变量: 可以在全部作用域使用的内置变量,PHP和网页的关键. 参见Ref3.
$i++
,++$i
支持,$i+=
支持. 支持+-*/%
. 赋值=
.字符串有.
和.=
.- 比较:
<,>,<=,>=,!=,==
,和JS类似,有===,!==
需要类型相等/不等的全等/全不等. 还支持<>
就是!=
. - 与
&& and
,或|| or
,非!
. 支持xor
异或, 不支持not.
数组,列表,结构一类数据结构
- 数组(索引数组):
$var=array(1,2,3)
, 调用时索引从0
开始,用$var[n]
调用,也支持用$var{n}
调用.可以用unset($var[n]
删掉某个元素(不影响后面),也可以整个数组unset($arr)
.- 数组运算:
+
两个数组合并,相同项保持前一数组的值而不覆盖; 支持==,!=,<>,===,!==
判断.
- 数组运算:
- 关联数组(类似字典):
$var=array("name"=>value, ...)
本质是特殊的数组,用=>
去映射. - 多维数组:
$var=array(array(),array()...)
; 调用$var[n1][n2],n1是最外层的.
控制循环函数
控制
if (条件表达式){;} elseif(条件){;};else{;}
C型ifswitch($var){case value:..;break;...default:...;}
和一般的类似,没有break会一起执行.switch($var): case语句 ; endswitch;
另一种表达的语法糖..蛋疼.
循环
for($i=1;$i<10;$i=$i+1){...;}
C型forforeach ($array as $var){;}
数组用循环,循环变量在as后面.- 对于字典,有
foreach ($dicname as $indexname=>$value)
来获取.
- 对于字典,有
while(条件){..;}
另一种表达:while(): ....; endwhile;
do{....;} while(条件);
函数
function name($var1,$var2=2) {statement;[return val/var];}
函数名大小写不敏感. 支持默认参数.funcname($var,val)
调用函数. 函数调用可以在函数定义位置之前(即函数定义可以在下方).
对象
class classname {public $element; private function(){}; }
$var=new Classname()
; 创建对象,会调用构造函数.- 调用属性或函数用
->
.$var->name
,$var->func()
. 注意属性不再要$name
. $this
对象自身.- 常量属性用
const
声明, 用::
调用. 常量调用或定义不用$
在前面! 没有对象都可以调用类里的常量(用::
). const不能和public共存. - 静态属性用
static
声明, 用类名::属性/方法
调用.
function __contruct(){}
构造函数class newclass extends oldclass{}
继承.- 重新声明同样名字的属性/方法对母类进行覆盖. 不想被覆盖, 就在母类里在public前面声明
final
.
- 重新声明同样名字的属性/方法对母类进行覆盖. 不想被覆盖, 就在母类里在public前面声明
操作文件
readfile(fname)
; 直接读取文件直接输出出来. 返回字节数,若echo会追加在文件内容输出后.fopen(fname,"r")
: 打开文件并操作.第二选项是模式,包括r,w,a,x,r+,w+,a+,x+
a是追加,x是创建新文件若存在返回false,+是读/写. 一般$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
fclose(fname)
: 关闭文件.fread(fname,maxsize)
: 打开文件读取,最大读取字节数maxsize.filesize(fname)
: 返回文件大小(byte).fgets(fname)
: 读取一行,文件指针移到下一行行头.fgetc(fname)
: 读取单字符.feof(fname)
: 判断是否读到文件末尾.如while(!feof($myfile)) {echo fgets($myfile) . "<br>";}
fwrite(fname,str)
: 向文件写入内容.file_exists(path)
: 检查指定位置的文件[夹]是否存在.move_uploaded_file(file,newloc)
: 移动上传文件到指定位置.上传文件是个临时名字,会被最终销毁. 若文件不合法或无法移动,则返回false.getcwd()
获得当前工作目录- 更多请参考Ref6.
常用命令
// 一般函数
echo "str"/$var/("str")/$var,$var2; //直接输出,无返回,可多个(用,)一起输出.{$var}的大括号不输出,整体性.
print "str"/$var/("str") //也是直接输出,只能输出一个字符串,返回1.
var_dump($var) //返回:数据类型(值). object(class),string(n),array(n),int,float,bool,NULL等. n是长度.数组按联合数组形式输出.
define(name,value,大小写敏感不) //定义常量.name是个字符串.大小写敏感不默认false.
defined(name) //是否已定义常量,返回对错
phpinfo(); //返回php的有关信息,包括各种设置
parse_url(url);//分析网址,返回scheme(http),host(主机或ip),path(主机后路径)
// 字符串函数
strlen(str) //字符串长
substr(str,start,length) //从第几位开始获取长度length子串,start是从0开始算的.
strtoupper(str),strtolower(str) //大写化和小写化.
strpos(str,substr) //返回匹配子串第一个位置.没有返回false.
htmlspecialchars(str) //能够将字符串转为HTML实体如 <, 避免被黑客利用而攻击.
trim(str,charlist) //去除字符串两端空白字符或预定义字符. 默认删掉空白,回车,tab等.
stripslashes(string) //删除添加的反斜杠.常用来对表单/数据库取回的数据进行处理.
empty(str) //是否为空,返回是否.
// 数学函数
round(var[,n]) //四舍五入, n可以指明四舍五入后变成n位小数.
rand([min,max]) //从min到max的随机整数,不输入默认0~32767. rand(0,1); 随机出数0/1.
// 数组函数
array_push(array,value); //推入元素到数组
count(array) //返回数组元素数量
sort(array) //索引数组从小到大升序排序,会改变数组顺序.
rsort(array) //降序排序
asort(array) //关联数组按值升序排序
arsort(array) // 关联数组按值降序排序
ksort(array) // 关联数组按键升序排序
krsort(array) // 关联数组按键降序排序
join('sub',array) //用sub串连接数组各个元素.
// 对象相关函数
class_exists('className') //判断是否存在(定义)该类
is_a($var, "ClassName") //是否该对象属于该类.
property_exists($var,"pro") //是否有该属性
method_exists($var,"methodname") //是否有该方法
// 内建常量
M_PI //内建常量,不用`$`调用,3.14.