PHP填坑

【前言】

   本文主要记录下PHP练习过程中踩过的坑,随着学习的深入不断补充积累

 

【主体】

这里记录下最近PHP踩过的坑,很多都是语法性错误

(1)函数结尾忘记加;

例如匿名函数

<?php
    $show = function($value){
        echo $value."你好";
    }
    $show("Tony");
?>

写了个匿名函数,正常情况应该输出Tony 你好。但是这里报错,显示

解析错误:语法错误,在第13行的C:\ PHPTutorial \ WWW \ index.php中出现意外的'$ show'(T_VARIABLE)

找了半天才测试出是函数没有加;,而错误提示不能精准地定位到出错行

【总结】①函数先写好形势,加上;②在报错行附近找错误源

 

(2)函数忘记传参

函数规定了参数后就必须传参,除非参数设定了默认值

 

(3)提交form表单时,如果action为空,那么就会提交到当前页面

 

(4)①global后可以跟多个变量,例如global $a,$b,$c等等;②global只能传递变量,不能将其变为全局变量

 

(5)超全局变量$GLOBALS()不仅可以把变量转为全局变量,还可以进行修改

 

(6)JAVA,JS,PHP等代码都是从上到下,逐行读取的。PHP里若没有exit函数,则会读取完毕

 

(7)递归函数:自己调用自己

 

(8) 参数的数据类型

 例如,系统内置函数举例copy()拷贝文件,两个参数必须为字符串

<?php
    if(copy('a.txt', 'b.txt')){
        echo "复制成功";
    }else{
        echo "复制成功失败";
    }
?>

 

(9)echo、print、print_r区别

①echo 是语言结构,不是函数或者方法,使用的时候可以不加括号,多用于单行字符串的输出。效率我记得是比print()高。

②print() 也是单行输出,但他是函数,使用时要把字符串做为参数传给print()函数。有些服务端程序用PHP来写的,输出会用到print();而不用echo ; 这个我不太清楚是什么原因……

③print_r () 可以用来遍历并输出数组的函数,我一般是在调试程序的过程中用来查看数组内容的。也可以用来输出单一的字符串。一般只在调试程序过程中使用。程序写好后,要把这东东去掉。

 

其他解释:

echo和print都可以做输出,不同的是,echo不是函数,没有返回值,而print是一个函数有返回值,所以相对而言如果只是输出 echo 会更快,而print_r通常用于打印变量的相关信息,通常在调试中使用。

print 是打印字符串

print_r 则是打印复合类型 如数组 对象

 

(10)修改php.int配置后无效?

          所有配置修改,都需要重启Apache服务器才会生效。

 

(11)PHP入口文件index.php

 

(12)PHP除了通过php.int配置参数外,还可以通过ini_get()获取,ini_set()设置参数。不过只能作用在当前文件下

 

(13)MySQL数据库创建后,无法重命名

 

(14)删除和更新MySQL数据时,需要在尾部添加where条件。否则会对整个表单产生影响。

 

(15)注意:删除重要数据前要备份

 

 (16)SQL 语句对大小写不敏感。所以查询语句SELECT 与 select 等效。

 

.(17)获取用户输入框输入时,记得去除两端空格trim()。去除左侧空格ltrim(),去除右侧空格rtrim()

 

 (18)用户密码一般要进行m5加密,以加密方式存到数据库

 

 (19)步骤:连接数据库,判断错误,设置字符集

$connect = mysqli_connect('localhost','root','root','user');
if(!$connect){
    die("could not connect:".mysqli_error());
}else{
    echo "连接成功<br>";
}
mysql_set_charset('$connect','utf-8');//注意:连接点为字符串形式

 

(20)向上取整

每一页都是整数,包括最后一页。如计算出20.3个页面,则要向上取整函数ceil()

$one = 3;
$two = 2;
$result = $one / $two;
echo ceil($result);//向上取整函数ceil()

 

(21)连接字符串,因为name等字段类型为char字符串类型,所以在解析的同时要在外面加上' '引号。

         所以要写成name=' "$_POST['name']" ',这样才可以解析成name='name'的形式

 

(22)mysqli_fetch_assoc() 函数从结果集中取得一行作为关联数组 ,取一条记录

 

(23)隐藏ID的输入框,常用来传值,<input type='hidden' name='id'> 

 

(24)utf-8文档编码;utf8为MySQL编码;

 

(25)密码必须加密md5(),验证时可以直接比对md5(pwd)即可。

 

 (26)类里的方法结束时不能加;,否则会报错Parse error: syntax error, unexpected ';'

翻译为:语法错误,意外的;,语法错误会导致脚本终止

//声明一个类,实现其接口
    class Super implements fly1,run1,water1{
    	//与抽象类和抽象方法相同,对于声明类里所带的接口,
        //必须对每个接口都进行一一实现,少一个也不行
    	public function fly($oil,$height){
    		echo "飞";
    	};
    	public function run($speed,$width){
    		echo "跑";
    	};
    	public function water($depth){
    		echo "游泳";
    	};
    }

 

 (27)PHP的命名空间语句位置必须在首行,否则会报错。且<?php必须顶行写

<!-- <meta charset="utf-8"> -->①没有顶行
<?php
    echo "56";②命名空间前有输出
    namespace name;//命名空间---相当于创建了一个文件夹
    class Test1{
    	public function __construct(){
    		echo "666";
    	}
    }
    new Test1();
?>

 以上都会导致报错:Fatal error: Namespace declaration statement has to be the very first statement in the script

翻译为:致命错误:命名空间声明语句必须是第脚本中的第一个语句

 

(28)面向对象的3大特征:封装、继承、多态

 

(29)拼接字符串报错

Parse error: syntax error, unexpected '='

 翻译为解析错误:语法错误,意外的'='

查找后发现拼接字符串时.和=必须紧紧贴着,否则会解析错误

<?php
	$name = 'tony';
	$name. = 'one';//这里没有紧贴,所以会报语法错误
	echo $name;
?>

 

(30)去除空格或自定义字符

trim()  -移除字符串两侧的空白字符或其他预定义字符

ltrim() - 移除字符串左侧的空白字符或其他预定义字符

rtrim() - 移除字符串右侧的空白字符或其他预定义字符

例如:

$sql = update user set name='tony',password='560',

 上述插入操作需要去掉右侧的,

rtrim($sql,',')

(31)变量分配要放在模板展示前,否则$this->display()无法展示数据

 

 

(32)注意:TP模板中,如果if标签进行两个变量的比较,如果变量时数组并且用的是数组的点形式,则需要在 == 前后加空格,并且在最后的一个变量前加上空格

 

(33)表单重置

$('.clear').('click',function(){
    $('form')[0].reset();//重置reset方法是js方法,所以需要jquery对象转换js对象
})

 

 

 

 

 

 

猜你喜欢

转载自570109268.iteye.com/blog/2413547