php的特点是,PHP语法特点和技巧浅析

文/michaelgbw

php的开发者在程序开发界一直占有着一席之地,我也是这样的一个phper,我们今天并不是要说php是什么,我想这大家baidu,google一下,比我讲的清楚,这是肯定的。

在面试中,php的语法因为简单易懂,所以有时并不做为考察点出现,还有,目前就中国整个的php开发环境来说,thinkphp,yii,lavarel等框架已经是标配。我没事就会问自己,离开框架我们还会开发吗,或者说还能正确的开发吗,有时我们也会用php在cli的模式下运行,run个什么crontab什么的,这个可是没有框架给我们用呀。

所以 我们今天不说框架,不说原理(能力也有限),我们来说说原生的技巧。以下内容大多数都是我在学习,工作中遇到的。我们一起来看~

预定义常量

PATH_SEPARATOR //路径分隔符(Windows为分号,类Unix为冒号)

DIRECTORY_SEPARATOR //目录分隔符

PHP_EOL //当前系统的换行符

PHP_VERSION //PHP版本号

PHP_OS //PHP服务操作系统

PHP_SAPI //用来判断是使用命令行还是浏览器执行的,如果 PHP_SAPI=='cli' 表示是在命令行下执行

PHP_INT_MAX INT最大值,32位平台时值为2147483647

PHP_INT_SIZE INT字长,32位平台时值为4(4字节)

M_PI //圆周率值

M_E //自然数

FILE 所在文件的绝对路径

LINE 文件中的当前行号

DIR 文件所在目录

FUNCTION 函数名称

CLASS 类的名称

METHOD 类的方法名

NAMESPACE 当前命名空间的名称

可变标识符

//可变变量

$i = 3;

$k = 'i';

echo $$k; //输出3

//可变函数

function func(){

echo 'hello!';

}

$i = 'func';

$i(); //输出hello

//可变类名

class CLS{

public $k = 'hello';

}

$i = 'CLS';

$j = new $i;

echo $j->k;

//可变属性

class CLS{

public $k = 'hello';

}

$i = 'k';

$j = new CLS;

echo $j->$i;

.//可变方法

class CLS{

public function k(){

echo 'hello';

}

}

$i='k';

$j=new CLS;

$j->$i();

双引号,单引号

php中,单引号和双音号都可以定义一段字符串,但区别是双引号会默认在解析中进行处理。而单引号不会。

$user='gbw';

$sql="select * from user as u where u.name='$user'";

这个语句是正确解析出$user的。但单引号就不行了。但单引号直接display到view中去会更好,因为少了层解析,更快。

还有php的特定写法

$str = <<

字符串内容

EOT;

就是三个

empty(),isset(),==null,==0问题

为什么我会抛出这个问题呢,因为我曾经被他坑过,呜呜呜~

$string="php vs java,but we do not care result about this";

$str="php";

if(strpos($string,$str)){

echo 'find';

}

else{

echo 'no';

}

//no

这个例子大家在php开发中会不会遇到呢,strpos()返回字符串中特定字符的位置,明显是0,好,php是弱类型语言,0和null一样,自然是no,对于这个问题,建议用strstr判断。

这只是个引子,

$str=0;

if(!isset($str)){

echo 'empty';

}

else{

echo 'no';

}//no

if(empty($str)){

echo 'empty';

}

else{

echo 'no';

}//empty

if($str===null){

echo 'empty';

}

else{

echo 'no';

}//no

if($str==null){

echo 'empty';

}

else{

echo 'no';

}//empty

这里大家应该都明白了的吧,null 即是empty(),0即是null,但0并不是===null,即0还是int,null是空.

闭包

function closureCreater() {

$x = 1;

return function($fun = null) use(&$x) {//按引用传值

echo "
" . $x++;

$fun and $fun();

};

}

$x = "hello world";

$test = closureCreater();

$test();

$test(function(){ echo "closure test one"; });

$test(function(){ echo "closure test two"; });

$test(

function() use($x)

{ echo "
".$x;

});

2974afa3374e

结果

大家不知道除了js,php中还有闭包吧,但这里的php的闭包就没有js那般优雅了,要引用还要使用use方法,对于一般的闭包上面那个例子应该够用了。

php指针

大家会不会很疑惑,除了C,还有别的小兄弟有指针?

current/pos 返回当前被内部指针指向的数组单元的值,并不移动指针。

key 返回数组中当前单元的键名,并不移动指针

next 将数组中的内部指针向前移动一位,并返回移动后当前单元的值。先移动,再取值。

prev 将数组的内部指针倒回一位,并返回移动后当前单元的值先移动,再取值。

end 将数组的内部指针指向最后一个单元,并返回最后一个单元的值

reset 将数组的内部指针指向第一个单元,并返回第一个数组单元的值

这可是很有用的,当我们不知道一个数组的第一个元素下标是什么鬼时,current()的出现避免了我们的尴尬.

结束语

这里分享的都是在我工作学习中的问题,也是极有可能面试到的哦,这个是(一),我会在后面的工作学习中碰到问题及时分享的~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值