PHP入门注意的地方

1.echo 加上双引号是能识别变量的,但是单引号就不能识别变量

2.    PHP的连接符是.而不是+

3.var_dump()   输出变量的最完整信息,通常只用作开发的时候调试使用

4.   PHP和js一样属于弱类型语言,对于变量类型的界限不像c,c++那么清晰,最明显的例子就是数字字符串除数字不报错

5.  浮点数除浮点数结果还是浮点数,就算输出的是整型,但是本身是浮点型

6.  在取模的时候就算是浮点数会向下取整然后运算,PHP中的取模运算符总是针对整型

7.  如果字符串参与数学运算  PHP会尽量把字符串转化为数字 (只要字符串的从第一位开始是数字,如果没有视为0)  eg:   $v1 = "2wdw5" (2),$v2="1.2sdc"(1.2),$v3 = "dcw"(0);

8.php输出的时候可以输出多个参数,要用,连接比如:echo " " , $n;当然用.也是可以的但是用.还是表示的是输出一个,不表示输出多个

9.  js版本下的随机数(和PHP一样性质的了)function rand(n1,n2){ var re = Math.floor(Random()*(n2-n1+1))+n1;return re;}

10.   number_format()格式化数字     number_format($n1,4,".",",");   第一个参数是选定哪一个变量  第二个参数是小数点后显示几位,第三个参数是整数和分数的分隔符,第四个参数是千分位的分隔符

11.浮点数最好不要比较,因为浮点数不精确(在内部的原因就是浮点数在计算机内部转换为二进制浮点数可能除不尽所以存在误差)

12.   $d2 = time();获取当前的秒数  $d1 = microtime();获取当前的微秒数  $d3 = microtime(true);获取当前的秒数的万分之一,微秒数的十分之一返回的是一个带有四位小数点的浮点数,单位是秒

13.PHP里面的数组什么都能放,没有类型的限制

14.

获取一个时间:

$d1 = time(); //获得当前时间,精确到秒!

$d2 = microtime(); //获得当前时间,可以精确到微妙

$d2a = microtime(true); //这个常用,精确到万分之一秒,其实返回的是一个具有4位小数的浮点数,表示的是从时间原点开始算起的秒数。

$d3 = strtotime(“2013/10/6 15:28:29”) //使用一个字符串来获得一个时间

$d4 = mktime(15, 28, 291062013) //使用多个数字来获得一个时间,格式为:mktime(时, 分, 秒, 月, 日, 年)

 

获得一个时间中的某项的值,其语法是:

$v1 = idate("时间项代号DD", $d1); //这里,由时间项代号DD来设定获取的是哪一项。

$v2 = date( “格式化字符串” ,$d1 ):格式化时间,是将时间以前面格式化字符串中指定的格式返回,其中的时间代号或被实际的时间值所代替。

时间项的代号图;

15.

php中,数组的“下标”一般称为“键”(键名),并且,可以使用数字作为键名,也可以使用字符串作为键名。并且,数字也不必连续,可以任意设定!

$v3 = array(2, 3.3,  true,  “abc” ); //此时的键都是自动键:从0开始的整数数字

$v4 = array(0=>2,  1=>3.3, 5=>true,  2=>”abc”) //此数组内容跟上面$v3数组一样,但键名不同

$v5 = array(2, 3.3, 5=>true,  10=>”abc”); //此数组内容跟上面$v3数组一样,且前两个键名也相同

$v6 = array(2, 3.3, 5=>true, “abc”); //此数组内容跟上面$v3数组一样,且前两个键名也相同,最后一个的键是数字6

16.

数组遍历:

php中,数组通常不用for循环语句来遍历!而是使用php中数组特有的遍历语法,如下:

$v4 = array(0=>2,  1=>3.3, 5=>true,  2=>"abc");

foreach( $v4 as $value) //$value这里可以看作是一个“临时变量”,其在遍历过程中会顺次取得数组$v4中的每一项的值

//类似js中的for  in 遍历语法

{

var_dump($value);

echo "<br />";

}

//也可以这样更精确地遍历(既可以获得每一项的数据值,也可以获得每一项的键名)

echo "<hr />";

foreach($v4 as $k=>$v){ //这里,$v也是代表“当前项”的值,$k代表当前项的键名,他们也都是临时变量,名字自定

echo "键名:$k 对应的值为:$v <br />";

}

17.文件载入

require include require_once include_once

以上4个语法,功能一致,效果略有不同!

但是加入的文件就相当于一个容器只是提供代码的作用

引入时,不在乎目标文件的类型,只在乎目标文件内的代码!

18.PHP编译的时候是针对整个文件开始编译,不是只对一行代码编译包括js也一样

19.文件载入紧称17条,require 和include相比    require如果文件加载出错的话显示的是错误,而include显示的是警告。还有require_once是先判断是否加载了这个文件了,如果加载了就不用记载了,在以后的项目中基本上都用的是require 

20.终止脚本功能die或者exit  无论出现在哪里所有脚本都停止,并且他们俩个的后面都可以加一个小括号输入想要输入的东西,例如exit("<br>this is a error");

21.延迟脚本执行

sleep让脚本暂定一段时间,以秒为单位,不是无限暂停  最多执行30秒

22.PHP函数名对大小写不敏感,在变量中对大小写敏感

23.PHP中的可变变量

$a = 'hello';
$$a = 'world';
echo "$a"."${$a}";

输出的helloworld

24.可变函数可可变变量差不多

25.关于值传递和引用传递

 function text(&$name)
    {
    $name.="_nan";
    return $name;


    }
    $real_name = "php";
    echo text($real_name);
    echo "<br>" . $real_name;

按值传递能传递字符串可以不是变量,而暗引用传递必须传递的是变量名

26.参数默认值

可以使固定值  也可以是常量

27.php中有超全局变量既可以在函数体内也可以在函数体外(只有预定义的超全局变量,没有用户定义的超全局变量)

28.静态变量

29.关于测试函数:测试是否定义过这个函数,function_exists()

如果存在就会返回一个布尔值,在有的一些项目中常常会这么见到

if (!function_exists('function_name')) {
		# code...
	}
这样写虽然会在代码整合的时候不容易出错,但是这么做的原因还是出于对项目的不了解,

get_defined_functions();查看已经定义的函数

30.关于PHP的定界符<<<

<<<Eof 
…… 
Eof; 
看起来很简单,但是其中有许多地方需要注意。 
首先在<<<之后的字符Eof是自己定义的,随便什么都是可以的(比如AAA都可以),但是结尾处的字符一定要和他一样,他们是成对出现的,就像{}这样的——这是最基本的。 
在PHP定界符使用的过程中,第二个需要注意的问题——也是最经常出现问题的地方: 
结尾的一行(如上例的Eof;),一定要另起一行,并且改行除了Eof;这个定界符结尾标识之外不能有任何其他字符,前后都不能有,包括空格。如果在本行最前或者最后出现空格,制表符的话,你会收到一个这样的错误信息: 
Parse error: parse error, unexpected $end in……,提示你语法错误; 
第三个需要注意的是,如果在定界符中间出现有PHP的变量,你只需要像在其它字符串中输出一样写就行了

31.create_function()创建一个函数,里面可以有两个参数第一个参数是传递的函数名称(建议最好用单引号,因为单引号不会被解析为变量,如果是双引号的话会被解释为变量)

第二个参数也是字符串的形式,如果里面的行数够多的话,可以使用定界符。

$op = "max";
	if ($op == 'max') {
		$value = create_function('$m , $n',<<<'func'
				return max($m,$n);
func
			);
	}else{
		$value = create_function('$m , $n', 'return min($m,$n);');
	}
	echo $value(10,20);
	

32.关于匿名函数,在匿名函数之后一定要加上分号,不然就会报错难找;

USE的用法:use,可以使得匿名函数内部,来使用匿名函数外部作用域变量的数据

$greet=function($name)
	{
		printf("Hello %s\r\n", $name);
	};
	$greet('World');
	$greet('PHP');
	echo "<hr>";

	$age = "Helios";
	$outer = function(){
		$age = "jianshou";
		$sayAge=function()use($age){
			echo "Hi, $age";
		};
		$sayAge();
	};
	$outer();

注意,不是找全局,而是找外部!

use 使用的变量,也分为 引用传递和值传递!

默认是值传递:

function outer1(){
		for ($i=0; $i < 3; $i++) { 
			$GLOBALS['f'.$i]=function() use(& $i){
				return $i;
			};
		}
	}
	outer1();
	echo "<br>";
	echo $f0();
	echo "<br>";
	echo $f1();
	echo "<br>";
	echo $f2();
把use的&去掉就是按值传递显示的0 1 2

这样按引用传递的输出的是 3 3 3

因为在i==3的时候才推出循环,虽然不进入循环但是按引用,所有的i都公用一个内存改变的话会都改变

典型的匿名函数可以作为临时函数来使用!

例如,有些内部函数,需要调用某个函数来完成操作!像:array_map();

返回数组 = array_map(‘函数’, 数组);

对某个数组内的所有元素做利用提供的函数做操作!

$arr = array(10,12,-1,-12,2);
	$result = array_map('abs', $arr);
	var_dump($result);

	echo "<hr>";
	$result_arr = array_map(function($v){return $v*$v;}, $arr);
	var_dump($result_arr);

凡是参数需要 callback(callable)地方,都是通过传递匿名函数完成!

注意,callback类型的参数,可以放置一个函数名,可以放置一个匿名函数,还可以放置一个create_function 的结果!

 
$res = array_map(create_function('$v', 'return $v*$v;'), $arr);
	//echo $res(8);
	var_dump($res);


你可能感兴趣的:(PHP入门注意的地方)