现在的位置: 首页 > 综合 > 正文

[归纳]PHP手册重读与整理-基本语法与类型

2018年04月14日 ⁄ 综合 ⁄ 共 2692字 ⁄ 字号 评论关闭

Basic syntax 

-Escaping from HTML 

从html中分离。说白了就是脚本语言的特性,嵌入静态语言代码中。但是,就我目前的理解,不赞同这么做。混杂虽然可以体现处理问题的能力,但是,能简单的分门别类,何乐而不为呢?完整的分离,对于我所接触到的应用是可以很好完成的。

当然,对于某些应用中,需要向页面组合显示某些html结构,在php中组合了这些所谓必要的html。在我看来,这就和mvc做法相悖了。数据由model递交给controller,再将逻辑递交给view,而不需要去处理静态语言的东西。可以交给摸板引擎或者使用js来完成组装。(也许某一天我会推翻自己的这一想法⋯⋯(^_^))

-Instruction separation 

关于分隔脚本。每个语句后使用;分隔,每段脚本后使用结束标记符。值得一说的是,手册中的注解:

文件末尾的 PHP 代码段结束标记可以不要,有些情况下当使用 include 或者 require 时省略掉会更好些,这样不期望的白空格就不会出现在文件末尾,之后仍然可以输出响应标头。在使用输出缓冲时也很便利,就不会看到由包含文件生成的不期望的白空格。

我的做法就是,除非混杂的脚本(和html混合的情况)是必须外,几乎不添加结束标记符。这个问题我在使用sp框架的时候,遇到过一次。

-Comments

说到注释,想起一个有意思的事儿。我在检查一年前的代码的时候,发现有一段:

$user_info = array(
    'name' => $name,
    'id_tpye' => $id_type/*1.大陆;2.海外;3.港澳*/,
    'id_no' => $id_no
);

当时我就震惊了,当时是如何想的,把注释写在了未完成的赋值语句后面⋯⋯

到现在,关于注释,在看完《代码整洁之道》后,有了一定的自己的风格。不管怎样,是一种成长嘛!

Types

PHP 支持8种基本的数据类型。
四种标量类型:
boolean (布尔型)

没什么好说的,真假。就如江湖,真真假假,哈哈。武侠小说看多了。要说一点,看过别人的代码,有用大写TRUL FALSE或者小写的。没有区别的。但是,为了易读性,统一使用大写吧,但是为了书写代码的成本,小写吧。哎呀,不管了,我还是使用小写的。要注意:

转换为 boolean 时,以下值被认为是 FALSE:
布尔值 FALSE 自身
整型值 0 (零)
浮点型值 0.0 (零)
空 字符串, 以及 字符串 "0"
不包括任何元素的数组
特殊类型 NULL (包括尚未设定的变量)
从没有任何标记(tags)的XML文档生成的SimpleXML 对象
所有其它值都被认为是 TRUE(包括任何资源)。

-1 和其它非零值(不论正负)一样,被认为是 TRUE!

——这一点,对于方法调用返回值时,就要注意了。我大都使用正整数或者有意义的字符串。这不会让我混乱在返回值之间。

$neg_no = -1;
if($neg_no){
    echo '-1 is true!';
}

integer (整型)

PHP是弱类型的,因为程序员不需要关心变量类型。但是,手册里提到:

决不要将未知的分数强制转换为 integer,这样有时会导致不可预料的结果。

记下了。

float (浮点型, 也称作 double)

两个名称,说是因为历史原因,都存在了。想起很早时候做的一个性能测试,sizeof 和count的事儿。暂时没有涉及这一类型应用,不多说了。
string (字符串)

字符串没别的,关于定义,就是4种方式。我比较喜欢使用单引号。但是在处理SQL句子时候,最好是使用内含变量的方式。我曾不只一次尝试使用拼接的方式,最后累得半死。不过,由于以下规则,所以,使用时要注意:

当PHP解析器遇到一个美元符号 ($) , 它会和其它很多解析器一样,去尽量形成一个合法的变量名。可以用花括 号来明确变量名的界线。

$sql = "SELECT * FROM tbl_name WHERE id = {$cleaned_user_input_id}";

还有一个时关于寻找多维数组时候的注意点:

$array_ins[first][0]; // 不建议这么使用,虽然双引号内索引不加上引号是合法的,这会报一个常量为定义的notice
$array_ins['first'][0]; // 建议这么做

字符串挺多东西要注意的,等总结到String扩展了再说。
两种复合类型:

array (数组)

数组,神奇啊。kv映射?手册这么解释的:

此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。数组元素的值也可以是另一个数组。树形结构和多维数组也是允许的。

多强大啊。但是要注意的是,对于索引数组和关联数组,如果数组下标是混合的,那么下标为索引后添加关联下标,在php5.4前是从上一元素下标+1的,而之后,则是从0开始。其他的,在扩展Array中再说吧。

object (对象)

一个类的实例。使用new完成创建。这段注解对于大型应用中会有帮助哦:

如果将一个对象转换成对象,它将不会有任何变化。如果其它任何类型的值被转换成对象,将会实例化一个内置类 stdClass 的对象。如果该值为 NULL,则新的实例为空。数组转换成对象将使键名成为属性名并具有相对应的值。对于任何其它的值,名为 scalar 的成员变量将包含该值。

有一些应用在返回数据时,使用了对像转换,但是如果上一级返回值错误,这一次转换后的结果就是空啦。

最后是两种特殊类型:
resource (资源)

就是一个读取数据的引用啊。由数据库、文件、画布⋯⋯看这里:http://cn2.php.net/manual/en/resource.php 。
NULL (NULL)

这些情况变量都时NULL,它大小写不敏感:

-被赋值为 NULL。

-尚未被赋值。

-被 unset()。

将一个变量转换为 null 类型将会删除该变量并且unset它的值。

为了确保代码的易读性,有一些伪类型:
mixed
number
callback
——这几个后面再说吧,我好想还没遇到啊。悲催。callback倒是见到,闭包有用到

允许的强制转换有:
(int), (integer) - 转换为 整型(integer)
(bool), (boolean) - 转换为 布尔型(boolean)
(float), (double), (real) - 转换为 浮点型(float)
(string) - 转换为 字符串(string)
(binary) - 转换为二进制 字符串(string) (PHP 6)
(array) - 转换为 数组(array)
(object) - 转换为 对象(object)
(unset) - 转换为 NULL (PHP 5)

抱歉!评论已关闭.