【请您听我说】PHP语法特色的一些见解

1、基本认识

  PHP是干什么的?百度百科上提到说:PHP就是一门脚本语言,开发用的,相信这个大家只要去搜一下,就会有一大堆关于PHP概念的解释。php

  相信咱们对PHP的初步认识是从浏览器开始的吧,当咱们每打开浏览器去搜寻咱们所须要的信息时,网站页面会显示出各类各样很是棒的效果,五光十色的,静态效果和动态效果共存,十分漂亮。html

  这时候咱们须要思考一个问题,到底是什么让网站显示的如此华丽呢?java

2、PHP是世界上最好的语言

  在我上大学那会儿,记得C语言课上,老师说过一句话,任何变量要先定义,后使用。我嘴里抱怨着“为啥要先定义呢?想用就用呗,哪里这么多事儿!”。mysql

  当时在课上说这话,就是文艺复兴时期的布鲁诺对天主教信仰进行挑战,会被烧死的。直到有次不经意间翻开一本神书,上面有段代码:nginx

  它没有定义变量,直接拿变量进行计算,心想:厉害!原来老师说的也不全对嘛。laravel

  它将变量随意使用,一下子看成整型使用,一下子看成字符串使用,心想:这代码要飞啊!浪!程序员

  它甚至在变量数组中不存在索引时,也能使用,只是警告一下,程序依旧运行,结果正常输出,心想:神代码,再不学就晚了!web

  随后,我激动地合上书,定眼一看封面,上面写着三个字母: PHP面试

  从那时候,脑海中就悄然印下这句话:php是世界上最好的语言。sql

3、PHP的一些小故事

  一、非诚勿扰相亲节目中,被灭灯的男子采访感言:我不知道为何,说本身是作PHP,灯就全灭了。可以让女嘉宾灯全灭,这语言还不够好?黑人问号脸hhh

 

  二、若是您能让这个论坛炸开锅之PHP是世界上最好的语言,可以让男人放弃和妹子的约会,去论坛吵架,这语言还不够好?

某女:你能让这个论坛的人都吵起来,我今晚就跟你走.
某软件工程师:PHP是最好的语言!
某论坛炸锅了,各类吵架...
某女:服了你了,咱们走吧 你想干啥都行.
某软件工程师:今天不行,我必定要说服他们,PHP必须是最好的语言
某女:.......

  三、曾经有一部高清的“艾薇偶像剧”风靡网络,不少热血少年流着口水,连夜下载,第一集播出,一个中年男子带有口音说出:PHP是一门XXX的语言。男孩子纸巾都准备好了,最后看了这个,也是迷茫。

能让热血少年在撸管之际放下情绪,学习CS知识,这语言还不够好?

4、PHP用途

  说了那么多小故事,看此文的你是否是对PHP产生了一点兴趣呢?我再向大家说明一下用途吧。

  PHP具备简单易懂的语法、没有奇怪的黑魔法、既能面向过程,又能面向对象、安装后各类扩展集一身、包括但不限于mysql、json、mbstr等,方便至极。一言不合,一个页面就html和PHP混写,甚至最新版本都内置了小型webserver,连apache和nginx都不用上、一分钟搭建博客论坛问你怕不怕、国外Ci、laravel、kohana、zf等框架层出不穷、国内tp社区棒、语言建立者积极上进优化、语言bug全世界的程序员和你一块儿修复。最重要的是大小公司都用、找工做不愁啊!

  PHP可能不是世界上最好的语言,但他必定是最适合新手学习编程的入门语言,也是进入Web开发领域的绝佳语言。若是对网络安全感兴趣的小伙伴们,必定要掌握好这门语言哦!

5、PHP语言开发技巧

  也许屏幕前的你目前可能对PHP语法不是很了解,我推荐你逛逛这个站点:PHP手册,这里面对PHP语法作了很是详尽的解释,很适合初学者及开发者作全面的参考。此文主要是为了分享博主在学习开发中的一点经验分享。

  如下内容大多数都是我在学习,工做中遇到的。咱们一块儿来看~~

一、预约义常量

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 当前命名空间的名称

二、可变标识符

 1 //可变变量 
 2 $i = 3;  3 $k = 'i';  4 echo $$k; //输出3  5 //可变函数
 6 function func(){  7     echo 'hello!';  8 }  9  $i = 'func'; 10  $i(); //输出hello 11 //可变类名 
12 class CLS{ 13   public $k = 'hello'; 14 } 15 $i = 'CLS'; 16 $j = new $i; 17 echo $j->k; 18 //可变属性 
19   class CLS{ 20       public $k = 'hello'; 21  } 22 $i = 'k'; 23 $j = new CLS; 24 echo $j->$i; 25 .//可变方法
26 class CLS{ 27 public function k(){ 28 echo 'hello'; 29 } 30 } 31  $i='k'; 32  $j=new CLS; 33  $j->$i();

三、双引号,单引号

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

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

这个语句是正确解析出$user的。但单引号就不行了。但单引号直接display到view中去会更好,由于少了层解析,更快。
还有php的特定写法:

$str = <<<EOT 字符串内容 EOT;

就是三个<和一个名字将一大段字符包裹起来,这个方法是不须要“”的,通常用在中间大量引用html时。

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

为何我会抛出这个问题呢,由于我曾经被坑过,┭┮﹏┭┮

1 $string="php vs java,but we do not care result about this"; 2     $str="php"; 3     if(strpos($string,$str)){ 4         echo 'find'; 5  } 6     else{ 7         echo 'no'; 8  } 9 //no

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

 1 $str=0;  2     if(!isset($str)){  3         echo 'empty';  4  }  5     else{  6         echo 'no';  7     }//no
 8     if(empty($str)){  9         echo 'empty'; 10  } 11     else{ 12         echo 'no'; 13     }//empty
14       if($str===null){ 15         echo 'empty'; 16  } 17     else{ 18         echo 'no'; 19     }//no
20         if($str==null){ 21         echo 'empty'; 22  } 23     else{ 24         echo 'no'; 25     }//empty

这里你们应该都明白了的吧,null 便是empty(),0便是null,但0并非===null,即0仍是int,null是空.

五、闭包

 1 function closureCreater() {  2   $x = 1;  3   return function($fun = null) use(&$x) {//按引用传值
 4     echo "<br />" . $x++;  5     $fun and $fun();  6  };  7 }  8  
 9 $x = "hello world"; 10 $test = closureCreater(); 11 $test(); 12 $test(function(){ echo "closure test one"; }); 13 $test(function(){ echo "closure test two"; }); 14 $test( 15     function() use($x) 16         { echo "<br />".$x; 17     });

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

六、php指针

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

current/pos 返回当前被内部指针指向的数组单元的值,并不移动指针。
key 返回数组中当前单元的键名,并不移动指针
next 将数组中的内部指针向前移动一位,并返回移动后当前单元的值。先移动,再取值。
prev 将数组的内部指针倒回一位,并返回移动后当前单元的值先移动,再取值。
end 将数组的内部指针指向最后一个单元,并返回最后一个单元的值
reset 将数组的内部指针指向第一个单元,并返回第一个数组单元的值

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

6、结束 

  这里分享的都是在我工做学习中的问题,也是极有可能面试到的哦,若是有好的想法或者遇到什么问题的话我会继续分享的~~~(ง •_•)ง

相关文章
相关标签/搜索