php中初学者常见的几个类似概念区分

require(),include()与require_once(),include_once()

按照手册的说法,这四个函数的主要功能都一样,对于初学者来说,并没有太大差别。require() 和 include() 除了怎样处理失败之外在各方面都完全一样。include() 产生一个警告而 require() 则导致一个致命错误。有过编译器经验的人应该明白,warning不会阻止程序运行,在C中,就像是类似“变量x被定义但是却从未使用过”一样,不会影响整个程序的运行,而fatal error则是另一种光景,就像是“不合法的指针相加”这样的错误,程序会停留在这里,不会执行,当然,PHP不太可能会因为数据类型为难你,但是文件缺失依然是致命错误。而当函数加上once之后,相对而言就是当一个文件在本文件中被多次引用时,如果有once,那么只会引用一次,带有once的函数应该用于在脚本执行期间同一个文件有可能被包含超过一次的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。

post与get

实际上这是http的概念。我们知道对于数据库的操作一般是“增,删,改,查”对应insert,delete,update,select四个SQL命令,一以贯之,对于HTTP,put,delete,post,get大致也就相当于对服务器资源的增删改查,但是也有差别,因为post和get几乎都能做到增删改查,尽管他们没有义务,但是他们有这样的能力。下图列出了从表面上看两者的区别(来自w3school):

  GET POST
后退按钮/刷新 无害 数据会被重新提交(浏览器应该告知用户数据会被重新提交)。
书签 可收藏为书签 不可收藏为书签
缓存 能被缓存 不能缓存
编码类型 application/x-www-form-urlencoded application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。
历史 参数保留在浏览器历史中。 参数不会保存在浏览器历史中。
对数据长度的限制 是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。 无限制。
对数据类型的限制 只允许 ASCII 字符。 没有限制。也允许二进制数据。
安全性

与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。

在发送密码或其他敏感信息时绝不要使用 GET !

POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。
可见性 数据在 URL 中对所有人都是可见的。 数据不会显示在 URL 中。


 从表中可以看到,post更加安全,传输限制也少,但是对于初学者来说,get更加容易理解,两者分工需要选择使用。

char与varchar

这其实是数据库的问题。这两种数据类型都是字符存储在数据库中的形式,确切的说,上述两种是在MySQL或者SqlServer中的变量类型,而在Oracle的varchar与char是一个类型。简单说,这两者的区别在于存储中,char类型设定多少就占用多少,如果少了就增加对应的位数的空值,而varchar则是可变长度的,尽管他也定义了一个长度,但是在存储中,varchar实际存储的是数据的位数加上记录数据长度的一个字节。在应用中,一般把可能需要修改的,存储量大的数据用varchar类型存储,不怎么修改的比如文章作者,站点标题等等用char。当然,如果实在不想区分,那么全部动用varchar也是可以的。

mysql_fetch_row()与mysql_fetch_array()

 每一个PHP教程都会讲到这两个函数的区别,大致就是说前者可以用arr[num]的方式来获取元素,而后者则不仅可以如此,也可以通过键值来获取记录。其实这个问题的核心在于区分PHP的两种数组。在PHP的数据类型中,数组最为重要,按照手册的说法,分为关联数组和索引数组,索引数组按照自增长的数字来获取记录,而关联数组则按照键值来获取记录,关联数组的每条记录都有一个独一无二的键值,一般是字符串类型的,其实我个人认为,这样的分法远不如Python来的好,索引数组就是列表,关联数组就是字典,一目了然。实际上也就是这点区别,使用上其实mysql_fetch_array()还有自己的参数指定来获取什么类型的数组,默认是交叉的一组关联,一组索引,而mysql_fetch_row()则是获取索引数组,另外,还有个一mysql_fetch_assoc()函数专门用来获取关联数组。我在开发中喜欢使用字典,也就是关联数组,键值带来的好处很多。

你可能感兴趣的:(php中初学者常见的几个类似概念区分)