来历
1: 当解析一个文件时,PHP 会寻找起始和结束标记: <?php 和 ?> ,php能够潜入任何文件中, php标记之间的代码能被php解析器解析,返回给前端
2: php也允许使用短标记<? ?> , 需要修改php.ini中的short_open_tag指令, 也可以在编译php的时候使用 --enable-short-tags 参数, 如果是php5.4以后的版本, 默认开启短标记,
3:如果php文件内部内容为纯php代码, 那就不需要添加结束标记。
4:注意:如果php的结束标记后面有空格或者换行,会被php解析发送到前端, 为了避免这种问题, 可以养成不写结束标记的习惯
可以将php代码和html分离, 这种写法不是很常用:
<?php if(1==1) :?> "1==1"; <?php else: ?> "1==0"; <?php endif; ?>
利用短标记输出变量, 把echo替换成 = 号即可:
<? $a = 1; $b = 2; ?> <?= $a + $b ?>
PHP的基本数据类型
四种基本类型: boolean, integer, float( double, float和double是同时存在的 ), string
三种复合类型: array,object, callback
特殊类型:resource, NULL
类型之间的转换:
该语言的类型转换和C语言和java一摸一样, 在变量前添加一个小阔号,小括号内部为转换的数据类型:
<?php $foo = (int) $bar; $foo = ( int ) $bar; ?>
也可以使用gettype和settype进行类型的转换:
<?php $var = 1234; settype($var,"string"); echo $var." ".gettype($var); ?>
基本类型扩展
布尔值:true, false
数字int:ℤ = {..., -2, -1, 0, 1, 2, ...} 集合中的数字, 只要整数, 二进制开头比如:0b111111, 十六进制的整数,以0x开头比如:0xabc;
浮点数float(double):只要是有小数位的都是浮点数, 如果要做小数位的操作,可以用浮动数, 但是还是会存在精度问题;
字符串细说:
双引号之间的变量会被解析:
<?php $user = "test user"; echo "my test user is $user";
更加细致的方法是用花括号, $符号放在花括号外面或者花括号里面都可以:
<?php $user = "test user"; echo "my test user is ${user}"; echo "my test user is {$user}";
字符串可以使用下标索引快速获取字符, 使用{}或者[]都可以
<?php $user = "abcdef"; echo $user{0}; echo $user[0];
可以利用{}快速删除或者修改,或者增加字符
<?php $user = "abcdef"; //删除第二个字符 $user[1]=""; //编辑第二个字符 $user[1]="2" //在索引为29的位置新增一个字符 , 该字符串数组会自动变长 $user{30} = "d"; echo $user;
headdoc的写法相当于php双引号的写法:
<?php $a = "test"; echo "<div> \"{$a}\" </div> "; //headdoc相当于双引号的写法 echo <<<EOF <div> "{$a}" </div>\n EOF;
nowdoc相当于php单引号的写法, 所有的数据都不被解析:
<?php echo <<<'EOD' <div>{$a}</div> EOD;
php字符串的常用函数:http://naotu.baidu.com/file/1e46776d03f11206fc2254b36e8e0ee1?token=0ad794e52225d751
数组对象
php的数组即是数组也是对象(hashmap),索引自增, 对象的key值也是唯一的
php5.4起, 可以使用中括号进行变量的声明
$arr = ["a","b"]
对象的key 可以是 integer 或者 string。value 可以是任意类型, 没有键名的索引默认为当前数组最大索引+1, 如果没有最大索引, 键名为0开始, 稳步递增
如果删除数组中的数据, 并给数组添加数据, 索引并不会从头开始:
<?php $arr = array('a','b','c','d'); foreach( $arr as $i => $it ) { unset( $arr[$i]); } $arr[] = 'e'; var_dump( $arr ); ?>
通过array_value重建索引:
<?php $arr = array('a','b','c','d'); foreach( $arr as $i => $it ) { unset( $arr[$i]); } $arr1 = array_values($arr); $arr1[] = 'e'; var_dump( $arr1 ); ?>
数组的赋值是复制, 并不是引用, 仿佛C语言中调用了数组的复制构造函数, 如果要让数组出现引用关系, 需要&,引用符:
<?php $arr = array('a','b','c','d'); $arr1 = $arr; $arr1[0] = "0"; var_dump($arr1); printf("输出之前的$arr:\n"); var_dump($arr); ?>
函数
<?php class Fn{ function dofn(){ printf("do i"); } }; $fn = new Fn(); $fn->dofn();
如果数组转化为对象, 只能访问对象的索引的属性, 索引的属性无法访问, 必须通过 foreach 迭代访问:
<?php $arr = ["a"=>"aa","b","c","d"]; var_dump($arr); $obj = (object)$arr; echo $obj->{"a"}; //输出aa echo $obj->{"1"}; //无输出
如果是基本的数据属性, 转化为对象, 通过访问对象的scalar,可以获取到原始数据:
<?php $obj = (object) 'nihao'; echo $obj->scalar; //输出 nihao
资源类型
由于资源类型变量保存有为打开文件、数据库连接、图形画布区域等的特殊句柄,因此将其它类型的值转换为资源没有意义。
回调函数
回调函数像是java的反射, 通过一个字符串即可执行一个函数:
<?php function fn(){ echo "fn is fn\n"; } call_user_func("fn"); class Fn{ function en(){ echo "Fn->en\n"; } } $f = new Fn(); call_user_func(array($f,"en"));
匿名函数,函数本无名, 只是把函数赋给一个变量:
<?php $fn = function() { echo "fn\n"; }; function testClosure(Closure $callback) { echo "run run\n"; $callback(); } testClosure( $fn );
作者: NONO
出处:http://www.cnblogs.com/diligenceday/
企业网站:http://www.idrwl.com/
开源博客:http://www.github.com/sqqihao
QQ:287101329
微信:18101055830