php新手常见问题

1.  不要在SELECT查询中使用 *  在表中返回所有的字段,这会非常的慢。你只需要取出你需要的数据字段。如果你需要取出所有的字段,那么可能你的表需要更改了。

错误1:foreach循环后留下悬挂指针

foreach循环中使用 引用 更改迭代的元素 这样可以提高效率,但是记得循环结束后销毁引用,否则$value是数组中最后一个元素的引用,如果下面有用到这个变量的时候会出错

//例子:

$arr = array(1, 2, 3, 4);

foreach ($arr as &$value) {
$value = $value * 2;

}//now array(2,4,6,8)

unset($value);  // $value no longer references $arr[3]

错误2:对isset()函数行为的错误理解

isset($var); //当变量为null或者不存在时,返回false,所以,要是检查数组中某键是否存在时, bool array_key_exists ( mixed$key , array $search ), array_key_exists() 在给定的 key 存在于数组中时返回 TRUEkey 可以是任何能作为数组索引的值。array_key_exists() 也可用于对象。

错误5:内存使用低效和错觉

一次sql查询获取多条记录比每次查询获取一条记录效率肯定要高,但如果你使用的是php中的mysql扩展,那么一次获取多条记录就很可能会导致内存溢出。

为了避免此类问题,可以考虑分几次完成查询,减小单次查询数据量;

错误6:忽略Unicode/UTF-8问题

php编程中,在处理非ascii字符时,会遇到一些问题,要很小心的去对待,要不然就会错误遍地。

举个简单的例子,strlen($name),如果$name包含非ascii字符,那结果就有些出乎意料。在此给出一些建议,尽量避免此类问题:

  • 如果你对unicode和utf-8不是很了解,那么你至少应该了解一些基础。推荐阅读这篇文章。
  • 最好使用mb_*函数来处理字符串,避免使用老的字符串处理函数。这里要确保PHP的“multibyte”扩展已开启。
  • 数据库和表最好使用unicode编码。
  • 知道jason_code()函数会转换非ascii字符,但serialize()函数不会。
  • php代码源文件最好使用不含bom的utf-8格式。

错误7:假定$_POST总是包含POST数据

// js
$.ajax({
url: ‘http://my.site/some/path‘,
method: ‘post‘,
data: JSON.stringify({a: ‘a‘, b: ‘b‘}),
contentType: ‘application/json‘

});

因为$_POST是全局变量,所以更改$_POST会全局有效。因此对于Content-Type为 application/json 的请求,我们需要手工去解析json数据,然后修改$_POST变量。

// php
$_POST = json_decode(file_get_contents(‘php://input‘), true);

此时,我们再去输出$_POST变量,则会得到我们期望的输出:

array(2) { ["a"]=> string(1) "a" ["b"]=> string(1) "b" }

错误8:认为PHP支持字符数据类型

看看下面的代码,猜测下会输出什么:

for ($c = ‘a‘; $c <= ‘z‘; $c++) {
echo $c . "\n";
}

如果你的回答是输出’a‘到’z‘,那么你会惊奇的发现你的回答是错误的。

不错,上面的代码的确会输出’a‘到’z‘,但除此之外,还会输出’aa’到’yz’。我们来分析下为什么会是这样的结果。

在PHP中不存在char数据类型,只有string类型。明白这点,那么对’z‘进行递增操作,结果则为’aa’。对于字符串比较大小,学过C的应该都知道,’aa’是小于’z‘的。这也就解释了为何会有上面的输出结果。

如果我们想输出’a‘到’z‘,下面的实现是一种不错的办法:

$letters = range(‘a‘, ‘z‘);

for ($i = 0; $i < count($letters); $i++) {
echo $letters[$i] . "\n";

}

错误9:忽略编码标准

对于PHP开发者来说,是比较幸运的。因为有PHP编码标准推荐(PSR),由下面5个部分组成:

PSR-0:自动加载标准
PSR-1:基本编码标准
PSR-2:编码风格指南
PSR-3:日志接口标准

PSR-4:自动加载

错误10:错误使用empty()函数

检查一个数组是否为空最后的办法是用 count() 函数

时间: 2024-10-12 14:36:06

php新手常见问题的相关文章

ROS(机器人操作系统) 新手常见问题汇总

该博文致力于汇总ROS常见问题及解答,让更多的人少走弯路,避免重复造轮子.本文会持续更新... 如果大家也有相关经验分享,还请在评论区添加评论,博主会及时补充. 同时希望大家踊跃提问,一起简化ROS编程 软件问题: 硬件问题:

docker新手常见问题和知识点

一直在想怎麼做這個切入點,後來想想以docker启动脚本来展示是最好的. 如今,现在使用docker的话,基本都是centos7了,新手如果要学docker,如果直接centos7,如果还用centos6的话,会经常掉坑的! docker的启动脚本  /usr/lib/systemd/system/docker.service. 以上這個圖,只是為了讓各位看一下,docker有挺多的環境加載文件,而且每個docker版本的環境加載文件都不一樣,但是基本都能在啟動腳本裡面找到. 比如說上圖,我的d

RF新手常见问题总结--(基础篇)

1. 经常有人问这个元素找不到,一般先排除这两个地方,再自己找找A:是否等待了足够的时间让元素加载 (增加sleep xx, wait Until xxx)B:  仔细查查,这个元素是否进入到另一个frame了 (select frame xxx)上面两点都确定了还不行,那改变下xpath的方法 下面的方法掌握了,基本上没有找不到的.C:xpath = //div[text()='web上显示的文本']  根据文本匹配还有一文本前后可能有空格,特殊字符,可以用部分文本来匹配D:xpath = /

JEECG 新手常见问题大全,入门必读

大家还有什么问题,请跟帖,谢谢支持.. JEECG常见问题大全 原文地址:http://t.cn/RvYsEF6 1. jeecg数据库脚本问题   注意:jeecg3.5.2之前版本,不需要数据库脚本,程序会自动初始化数据库.从3.5.2+开始,需要手工执行SQL脚本,初始化数据库. 2.   Eclipse内存溢出2014-6-27 15:29:21 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler process

android(eclipse)新手常见问题总结(一)

1:jdk无法更新   进入工具里面手动获取镜像资源 并且改为强制 2:报错:This version of the rendering library is more recent than your version of AD 在布局预览中重新选择适合你的sdk的版本 3:当添加文本信息有黄色感叹号错误时或者报错(I18N] Hardcoded string "this is textview", should use @string resource) 可以在string 添加&

Bootstrap新手常见问题

题记 bootstrap这个开源的UI库确实很方便,用了两日,觉得不错,但也有些问题比较头疼! 主题 1.怎么使用?怎么定制?下面是一个范例,修改了navbar的颜色,重新设置了select控件的默认长度 <link href="../static/bootstrap/css/bootstrap.css" rel="stylesheet"/><script src="../static/bootstrap/js/bootstrap.min

python新手常见问题(转)

常见错误1:在函数参数中乱用表达式作为默认值 Python允许给一个函数的某个参数设置默认值以使该参数成为一个可选参数.尽管这是这门语言很棒的一个功能,但是这当这个默认值是可变对象(mutable)时,那就有些麻烦了.例如,看下面这个Python函数定义: 1 2 3 >>> def foo(bar=[]):        # bar是可选参数,如果没有指明的话,默认值是[] ...    bar.append("baz")    # 但是这行可是有问题的,走着瞧…

React-Native hello word 搭建及新手常见问题

参考文档:http://reactnative.cn/docs/0.20/getting-started.html cmd 打开 敲入 1. npm config set registry https://registry.npm.taobao.orgnpm config set disturl https://npm.taobao.org/dist 2.npm install -g react-native-cli 3. cmd 中切换到指定的项目路径 react-native init Aw

python 新手常见问题

1.python 三元运算符 无,用 if else 2.python 设置代码缩进 全选..然后按tab 3.记录程序运行时间 import time time_start=time.time() time_end=time.time() print('totally cost',time_end-time_start) 原文地址:https://www.cnblogs.com/quietwalk/p/9104499.html