本系列主要结合《PHP和MYSQL WEB开发 第四版》,在阅读中提出自己认为比较重要的一些问题,以加深对知识的了解程度。
1、简短、中等以及冗长风格的表单变量
$name; //简短风格,不安全 $_POST['name'],$_GET['name'],$_REQUEST['name'], //中等风格 $HTTP_POST_VARS['name'] //冗长风格,已经抛弃。
2、php字符串中的单引号、双引号、heredoc以及nowdoc
(该部分内容主要参考http://php.net/manual/zh/language.types.string.php)
一个字符串可以用 4 种方式表达: 单引号、双引号、heredoc、nowdoc.
单引号:定义一个字符串的最简单的方法是用单引号把它包围起来(字符 ')。
要表达一个单引号自身,需在它的前面加个反斜线()来转义。要表达一个反斜线自身,则用两个反斜线(\)。其它任何方式的反斜线都会被当成反斜线本身:也就是说如果想使用其它转义序列例如 或者 ,并不代表任何特殊含义,就单纯是这两个字符本身。
Note: 在单引号字符串中的变量和特殊字符的转义序列将不会被替换。
双引号:如果字符串是包围在双引号(")中, PHP 将对一些特殊的字符进行解析。用双引号定义的字符串最重要的特征是变量会被解析。
Heredoc 结构:
在该运算符之后要提供一个标识符,然后换行。接下来是字符串string本身,最后要用前面定义的标识符作为结束标志。
结束时所引用的标识符必须在该行的第一列,而且,标识符的命名也要像其它标签一样遵守 PHP 的规则:只能包含字母、数字和下划线,并且必须以字母和下划线作为开头。
要注意的是结束标识符这行除了可能有一个分号(;)外,绝对不能包含其它字符。这意味着标识符不能缩进,分号的前后也不能有任何空白或制表符。更重要的是结束标识符的前面必须是个被本地操作系统认可的换行,比如在 UNIX 和 Mac OS X 系统中是 ,而结束定界符(可能其后有个分号)之后也必须紧跟一个换行。
如果不遵守该规则导致结束标识不“干净”,PHP 将认为它不是结束标识符而继续寻找。如果在文件结束前也没有找到一个正确的结束标识符,PHP 将会在最后一行产生一个解析错误
<?php
$name = 'MyName';
echo <<<EOT
My name is "$name".
EOT;//注意结束标识符的前面必须是个被本地操作系统认可的换行。
?>
Nowdoc 结构:就象 heredoc 结构类似于双引号字符串,Nowdoc 结构是类似于单引号字符串的。Nowdoc 结构很象 heredoc 结构,但是 nowdoc 中不进行解析操作。这种结构很适合用于嵌入 PHP 代码或其它大段文本而无需对其中的特殊字符进行转义。
3、php跨平台问题
PHP跨平台,因为是解释执行的,在各类平台下都可以执行,分别由相应平台的PHP软件(解释器)来执行你编写的PHP程序。(摘自百度)
php的解释器有多个操作系统的多个版本,多的偶都叫不出来名字,凡是有解释器的操作系统你写的php程序就可以运行,不论你是在windows还是linux下写的
4、php数据类型介绍
(该部分主要参考http://blog.csdn.net/jt521xlg/article/details/7528592)
其实该部分一个主要的疑问点在此:php是跨平台的语言,那么其integer型的数据长度会依赖于机器内存?
在参考文献中,罗列了以下一些数据类型:
类型名称 | 类型表示 | 取值 |
bool | 布尔型 | true,false |
integer | 整型 | -2147483647-2147483648 (2^31-1) |
string | 字符串型 | 字符串长度取决于机器内存 |
float | 浮点型 | 最大值1.8e308 |
object | 对象 | 通过new实例化 $obj=new person(); |
array | 数组类型 | $arr=array(1,2,3,4,5,6);//一维数组 |
resourse | ||
null | 空值 | null |
参考文献中关于整型有这么一句话:“整型的范围-2147483647--2147483647 ,如果超过该值会自动转换成float型。我们可以使用echo PHP_INT_SZIE 输出integer的字长,和机器有关。echo PHP_INT_MAX 输出integer的最大值”。通过这句话,并且结合问题3,我们可以这样理解,其实整型的范围还是跟机器有关的,并且这种思想跟跨平台是不冲突的,因为php的跨平台是靠多个解释器来实现的。(如该句话中给出的应该是-2147483647--2147483647,只能说明当前机器为32位的机器,当超过最大值2147483647,只是自动转换成float)。
5、php常量跟变量的区别、传值与传地址的区别
有关变量的知识,可以参见我之前的文章:http://blog.csdn.net/zhanglvmeng/article/details/11920323
6、比较操作符:等价操作符== 与恒等操作符===
有关这一部分的知识,可以参见我之前的文章:http://blog.csdn.net/zhanglvmeng/article/details/11927587
7、错误抑制操作符(@)、执行操作符(` `)、类型操作符(instanceof)
有关操作符的问题可以参见我之前的文章:http://blog.csdn.net/zhanglvmeng/article/details/11921033。其中还讲述了错误抑制操作符执行效率慢的原因
8、PHP中echo(),print(),print_r()的区别
echo ,print的区别在于echo 可以输出多个变量值,而print只有一个变量,做为一个字符串输出. 另一点区别在于echo 没有返回值,print有返回值1.print不能输出数组和对象。
具体信息可以参见我之前的博客:http://blog.csdn.net/zhanglvmeng/article/details/11950315
9、变量状态isset/unset/empty() 对比:
这是我之前转发的一篇文章,不错。http://blog.csdn.net/zhanglvmeng/article/details/11928469
empty() 和 isset() 虽然都是变量处理函数,它们都用来判断变量是否已经配置,它们却是有一定的区别:empty还会检测变量是否为空、为零。当一个变量值为0,empty() 认为这个变量同等于空,即相当于没有设置。
当要 判断一个变量是否已经声明的时候 可以使用 isset 函数 【注意:isset是看是否设置了,设置了为true,未设置为false,不要搞反了。】
当要 判断一个变量是否已经赋予数据且不为空 可以用 empty 函数
当要 判断 一个变量 存在且不为空 先isset 函数 再用 empty 函数
10、 Break:跳出循环,执行循环之后的第一句 continue :跳出本次循环,执行下一次循环 exit:结束整个PHP脚本的执行