快捷搜索:  汽车  科技

如何正确学php(边练边学PHP二)

如何正确学php(边练边学PHP二)<?php //PHP的变量以美元符开始($),不需要提前声明,可以直接赋值,如: $number=1;//数字 $string="1";//字符串 $bool=true;//布尔类型 //这里有一点要注意的是,数字和字符串在比较的时候,会自动转换类型 //比如1==“1”是返回true的,这是弱类型语言的一个特征 $a=array();//数组 $a=[];//还是数组,[]这种写法是5.4新增的 $a=new stdclass;//对象 //要注意的一点是,PHP里面,数组和其他语言数组并不是一样的,PHP里面的array本质上是hash table //包括了一般语言里的数组和hashmap等不同类型的数据结构 [1 2 3 4 5];//类似于其他语言的数组,key为0 1 2... ["key0"=>1 "key1&#

一、语法

1. PHP代码的开始标记

  PHP代码以<?php开始,以?>结束 。这主要是因为PHP在创建之初是为了方便写网页,所以大部分代码是嵌入到html页面里面的,PHP文件允许包含除了PHP代码外的其他内容。为了区别html代码和PHP代码,PHP文件里面PHP代码会包含在<?php ?>之间,标记之外的内容会原样输出。

<?php //...这里写PHP代码 ?> <html></html><!-- 这里会原样输出-->

注意:

a. 早期的代码也有使用<??>标记的。

b. 后来因为web开发流行MVC模式,开始前后端分离,前端更多使用模板渲染,甚至最近几年流行的mvvm已经不需要服务端来渲染页面。所以为了让PHP在执行过程中,项目文件太多的情况下,不至于在输出结果中输出额外的空白字符,现在PHP文件一般<?php会顶格,文件末尾的?>会省去,这样整个文件都当作PHP代码,不会原样输出?>之后可能存在的空格。

<?php //全是PHP代码 ?>

c. PHP文件编码一般使用utf-8不带bom。因为某些情况下,bom会输出多余的不可见字符,产生不好排查的疑难bug。至于gbk之类的编码,只有比较老的系统使用,在和utf-8混用极易产生乱码。

2. 基本语法

a. 变量和常量

<?php //PHP的变量以美元符开始($),不需要提前声明,可以直接赋值,如: $number=1;//数字 $string="1";//字符串 $bool=true;//布尔类型 //这里有一点要注意的是,数字和字符串在比较的时候,会自动转换类型 //比如1==“1”是返回true的,这是弱类型语言的一个特征 $a=array();//数组 $a=[];//还是数组,[]这种写法是5.4新增的 $a=new stdclass;//对象 //要注意的一点是,PHP里面,数组和其他语言数组并不是一样的,PHP里面的array本质上是hash table //包括了一般语言里的数组和hashmap等不同类型的数据结构 [1 2 3 4 5];//类似于其他语言的数组,key为0 1 2... ["key0"=>1 "key1"=>2];//类似于其他语言hashmap的形式 [ 10 "key"=>1 ];//混合形式,此处10的key是0,数组定义时未指定key的,会从0开始赋值 [10=>1 2];//如果key为数字,则后面元素key从此元素的key开始增加,2的key是11 //数组有一些基本的操作, $a []= 10;//不指定key的时候,会将元素添加到数组末尾 array_push($a 10);//和上面等价 $a $b;//此操作和array_merge类似,但有一些不同,至于具体什么不同,可以自己实验一下,或者去翻PHP的文档。这里是常见的面试题。 //常量分为下面两种 define("A_CONSTANT" 1);//define定义的常量是全局作用的,重复定义会报一个notice, //这里注意的是一般常量不要用两个下划线开头(__),因为内置的全局变量常常以此开头,避免重复。 //其次常量一般大写以表明是常量。 const A_CONSTANT=1;//此种定义常量如果在类定义体里面声明的话,需要通过类名来引用 class A { const A_CONSTANT=1; } //使用方式是 A::A_CONSTANT

b. 判断语句

<?php if(1==1){ //条件 一般是bool类型,但实际因为那个年代的c系语言的if条件都可以接受其他类型的值, //比如0结果等同于false,非0则是等同于true //expr1在条件为true时执行 echo "equals\n"; }else{ //如果不满足条件就会执行expr2,注意else语句不是必需的,可以省略 echo "not equals\n"; }

c. 循环语句

PHP的循环语句有几种形式,

<?php //c-style的for,和c语言一样 for($index=0;$index<10;$index ){echo $index;} //PHP的遍历数组的方法,这种遍历方式在PHP里面非常常用 $arr = range(0 10); foreach($arr as $key => $value){echo $value;} //这里的“=>”表示数组的key和value,如果不需要key,可以只写value,不包括前面的"$key=>" //c-style的for,和其他语言一样 while($index<10){echo $index;$index ;} //do-while 会在判断条件前先执行一次,有时候用作某些判断条件需要根据第一次执行结果的逻辑实现 do{}while() //有几个关键词用在循环语句中,break,continue,分别指的是中断循环以及之间跳过这一次循环 //注意break和continue除了常见的形式,在PHP里还有一种形式:break 1; //关键词后加一个数字,表明跳出几层循环,1指的是当层循环 //switch-case语句和循环一样可以使用break和continue

d. switch-case

<?php //注意一点 switch-case里面的break,和c一样,如果不加break,会穿透到下一个case里面去。 //可以试试注释掉break看看执行结果 //PHP里面注释有两种 一种是两个斜线// 另外一种是多行注释 /**/ $target=100; switch($target){ case 100: echo "one hundred\n"; break; default: echo "not one hundred\n"; }

  1. 函数,类,命名空间

<?php //这样可以定义一个函数, //注意函数的作用域,全局变量要声明global $s = "global var"; function aFunc(){ echo "this is a function\n"; //可以试试注释下面这一句,看是否会有变化。 global $s; echo "{$s}\n"; } // class A{ //public/protected/private 是访问修饰符,表示的是类成员的可见范围 //public表示类内部,父类,子类,外部都可访问 //protected 表示类内部,父类,子类可以访问 //private 表示 只有类内部可以访问, //protected和private成员,按照规范,一般下划线开始 public $publicVar=0; protected $_protectedVar=0; private $_privateVar=0; //方法的声明类似 public function getPublicVar(){ //注意这里写法,$this表示当前类的实例,$this->publicVar指的就是上面声明的 public $publicVar return $this->publicVar; } } //命名空间,用于组织隔离代码 namespace N; 代码练习:快速排序

介绍了基本的语法,这里肯定还有一些细节无法尽述,我尽量把语法里最基本的核心部分介绍了一下。这些内容可以说是提纲,同时掌握这些语法,至少基本的代码已经可以实现了,要想学习更多更详细的内容请查看php的官方网站http://php.net。

为了熟练掌握使用这些语法知识,我们需要实践练习一些编码题目。编程说到底是一个工程方面的技能,需要不断的练习和实践才能更深入掌握。这里,我们来用php实现一个快速排序算法。快速排序是非常常见和实用的排序算法,这里给出一个简单的示例,主要用于演示语法。实际因为效率问题,可能会用更多的优化方式,同时会增加自定义的排序比较方法,更加灵活,满足更普遍的排序需求。

<?php function qsort($arr){ $len = sizeof($arr); if($len<=1){ return $arr; } $base = intval($len/2); $bigger = []; $smaller = []; $equal = []; foreach($arr as $item){ if($item>$arr[$base]){ $bigger []= $item; }elseif($item==$arr[$base]){ $equal []= $item; }else{ $smaller []= $item; } } return array_merge(qsort($bigger) $equal qsort($smaller)); } print_r(qsort([23 5 7 84 22 454 2 54 63 2 6786 232]));

把上面代码保存为study2.php,执行。

如何正确学php(边练边学PHP二)(1)

看结果,没错,已经是有序排列了,而且是按照预想的排序方式,降序排列。大家可以根据快速排序算法自己写或者改进代码,通过写代码来熟悉语法。

猜您喜欢: