假如你学过C言语,如今想学习PHP,第一步当然是把握根本语法。PHP的根本语法与C极端类似,但也有一些共同的地方,本文经过比照的形式,依照学习C言语语法的程序,引见PHP的根本语法,心愿能协助相熟C的人疾速入门。
起首明白一个思维,PHP语法与C最年夜的没有同的地方正在于PHP重适用,而C重原理。学习C的语法,造就人谨严的思想习气,关于理解较量争论机的工作原理是颇有协助的。一个学过C的人开端学PHP,会对PHP过于宽松的语法感应没有顺应。PHP的开创人是为了更新本人的主页而设计PHP的,没有是像C的开创人那样为了开发操作零碎,这是二者语法格调没有同的基本缘由。明白了这个思维,咱们就依照数据类型、常量、变量、运算符与表白式、流程管制、函数、数组这样的程序来逐个引见PHP的根本语法并与C绝对照。因为是入门,以是咱们只沿着骨干道行进,路边有不少漂亮的光景,像正则表白式之类,咱们当前再专题探究。
PHP的数据类型
PHP与C的一个明显没有同是:不论常量仍是变量都没有需求先界说后应用(类中的变量除了外),PHP依据第一次赋值的状况主动决议数据类型。想一想昔时学习C言语的时分,咱们曾感应先界说后应用很费事(然而“长年夜后”(我是指学会C后)都领会到了它的益处),经常遗记界说,而如今少了这条端方,反而有点没有顺应了。
PHP的根本变量类型有整型(Integer)、浮点型(Float)、字符串(String)(这是C不的,但C++有String类)和布尔型(Boolean)(C不,然而C++有)。结构类型无数组以及工具。别的另有两个非凡类型:空值(NULL)(C也有)以及资本(Resource)。
常量
正在PHP中界说常量的形式正在学习C的人看来有点不堪设想,居然是用一个define函数完成的,PHP的函数真实是太凶猛了,前面咱们会看到界说数组也是由函数实现的,咱们真患上感激PHP无比丰厚的函数库,它们造诣了PHP的易用以及弱小。
define函数原型:bool define(string name,value,[,bool case_insensitive])
第三个参数假如是TRUE,则示意常量名是巨细写没有敏感的,反之就是敏感的,默许是敏感的。咱们仍是遵循习气,放弃常量称号巨细写敏感吧。
例:
<?php define(“C1”,”Hello PHP World!”); echo C1; ?>
以上代码的运转后果是输入常量C1的值(Hello PHP World!)。
这里趁便引见一下,<?php以及?>是PHP代码的定界符,将PHP代码同HTML代码区别进去,PHP代码的语句以分号完结,这是咱们习气的,另外PHP的正文符号也与C同样,你该晓得的,我就没有说了……这个echo就相称于C的printf或C++的cout,然而严格地说没有是格局化的输入,要想格局化也很容易,你把HTML代码写出来就好了,比方你要输入完结后换行,那你就写成define(“C1”,”Hello PHP World!<br>”);好了。留意,PHP也支持‘\n’作为换行符,然而它的含意仅仅相称于正在HTML里敲个回车,阅读器里看仍是正在一行上的。
变量
除了了不必界说,C言语用户最没有习气的就是一切的变量名前都要带个$,你可能会埋怨PHP的设计者太财迷了,但埋怨完了你还患上这么写,写PHP顺序,Shift键的应用率陡增!我忽然发现一个这样做的益处是:常量没有带$,因而常量与变量的区别变患上很显著,更首要的是,你不再用担忧自界说变量名同PHP要害字抵触了,你能够界说一个变量叫$if,$for等(当然,正式状况下仍是没有要这样做的好,过过瘾就好了)。
与C相反的是,PHP的变量名是巨细写敏感的,而且定名形式遵照C标识符的定名准则,还记患上吗?
假如你懂点C++,晓得援用的概念,上面这段就能够跳过,只需记住PHP也支持援用。不然花点工夫看上面这段或是去看看C++援用的概念也行。
<?php $var1=100; $var2=&$var1; $var2=200; echo $var1.”<br>”; echo $var2; ?>
这段代码的运转后果是输入两个200,辨别是$var1以及 $var2的值,输入的时分为了分明加了个换行符,PHP里句点(.)是字符串的衔接符。
为何只给$var2赋了200,而$var1也变为了200呢,你还能够尝尝只扭转$var1的值,你会发现这两个变量仿佛被绑正在一同了。其实语句$var2=&$var1;中的&符号的含意是将变量名$var2也指向$var1所正在的存储空间,也就是说$var2并非一个新变量,而是$var1的另外一个名字,它们对应的是同一段内存空间,不论应用谁都是拜访的同一个变量,$var2就叫做对$var1的援用。援用有甚么益处?当前再说。C言语的根本概念(变量名、变量地点、变量值)分明的话,了解起来应该不甚么艰难,假如根本概念没有分明,仍是先“温故”再“知新”吧。
趁便说一个无意思的事,假如你正在把下面的echo语句写成:
echo “The value of $var1 is ”.$var1.”<br>”;
那末你失去的输入将是:
The value of 200 is 200
还记患上吗,正在初学C言语时你极可能犯过把变量名放正在字符串里想输入它的值,后果失去的是变量名,而如今,你的“理想”完成了,而你却又没有习气了,呵呵。原来PHP正在应用双引号作为字符串的定界符时,会主动把变量名交换成相应的值,这样的做法使患上咱们输入含变量的字符串时变患上十分不便,一对双引号上去就能够了。假如你想放弃变量名原样输入,那末能够用单引号做字符串的定界符(当然另有其它方法,你能够细心钻研一下PHP的字符串)。仍是要感激C的严格要求,假如C像PHP这样的话,咱们恐怕到如今也搞没有清变量名、变量值这些概念。
变量的作用域
PHP的变量作用域与C很相似,正在此不许备多说。部分变量正在所存正在的函数外部无效,全局变量作用域是文件作用域(限于单个PHP文件),若部分变量同全局变量重名,同C的解决形式,全局的被屏蔽。略微费事一点的是,要想正在函数内拜访全局变量,需应用global要害字申明,不然的话PHP就以为是一个与全局变量同名的部分变量。
<?php $a=1; function func() { echo "The value of a is:".$a; } func(); ?>
以上代码不输入1,为何呢?PHP把函数里的$a看做是一个全新的部分变量,此$a非彼$a(函数体外的全局变量),此$a未赋值,因而输入为空。假如咱们要想正在函数体外部拜访全局变量$a的值,须正在拜访以前申明一句:global $a; 这样PHP就晓得要拜访的是全局变量$a了。
另有一种办法是行使PHP的零碎数组$GLOBALS,该数组是PHP零碎主动天生以及保护的,它记载了一切全局变量。echo $GLOBALS[“a”]; 便可输入此中$a的值。
PHP的动态变量仅正在部分函数域中存正在,同C是齐全相反的。
PHP有一种非凡的静态变量,名字听起来很容易让人以为就是C言语的一般变量(静态的、部分的),但这个静态的含意有点非凡,它是指变量名能够静态付与!也就是说,能够让使用顺序的终极用户为变量指命名字!
<?php $a="newname"; a="content";//newname本是$a的值,然而a的含意是以$a的值为名的变量 echo $newname; //$$a等价于 $newname echo $a; ?>
运算符以及表白式
PHP正在运算符以及表白式方面以及C极端相似,有算术、逻辑、关系、位运算符及相应的表白式,也有前提运算符(:?)及其表白式,一样仍是咱们开端提到的阿谁思维,适用为上,不少限度被勾销了,绝对较宽松。举个例子:
<?php $a="1"; $b=1; if ($a==$b) echo "Equal!"; else echo "Not Euqal!"; ?>
依照C的思想形式来看,$a是字符,$b是整型,二者比拟是字符的ASCII码值与整数比拟,显然没有等,而PHP运转后果倒是“Equal!”,看到这里,是否是有点冲破封建小家庭的礼教与心上人私奔的觉得?呵呵,抑或是惊呼PHP无奈无天?接上去另有让你呆若木鸡的,若$a="1e3"; $b=1000; 仍然是“Equal!”,也就是说PHP正在比拟时能主动将字符串“依照人的了解形式”进行转换,1e3没有就是迷信计数法示意的1000吗?乃至$a=”1e3HelloWorld”;城市相等,PHP将字符串转换为数值时会主动截取全副它能了解为数值的局部!其实C也容许逾越数据类型的比拟,比方字符型以及整型比拟,C也会主动转换类型,但它是“依照较量争论机的思想形式”转换的,由于字符正在较量争论机里就是依照ASCII码存储的。
PHP的“兽性化”也带来了费事,当咱们想严格比拟两个变量的时分怎样办呢?于是PHP提供了一对非凡的运算符:全等(===)以及非全等(!==),只有当值相称且数据类型相反时,才叫全等,二者有一没有符,则非全等。此时,即便1与1.0也长短全等的,缘由你肯定晓得吧。假如你感觉只有这样才虚浮,那末祝贺你,你曾经被C洗脑了。
运算符有优先级以及连系性的概念,这方面以及C是相似的,你兴许记没有清一切的优先级关系,然而不妨事,咱们有括号呢。
流程管制
PHP的流程管制语句是与C最像的局部了,几乎能够照搬。
有两点值患上留意,一是switch case语句中case前面能够写恣意表白式,而没有是C规则的只能是常量表白式,C的这类规则太通情达理了,以至于不少人学完了C还没有晓得 case score〉90:这样的写法错正在那里。如今好了,PHP外面,你能够这样写了。
再就是很希奇的一点,if elseif else构造两头的else以及if能够连正在一同写。
别的,PHP另有一个共同的轮回构造foreach,是专门为数组遍历预备的,稍后引见。
函数
PHP用户自界说函数的语法与C也很相似,可想而知,因为PHP弱化数据类型的概念,以是函数的前往值类型也就弱化了,函数界说的普通方式是:
function 函数名($参数1,$参数2,……,$参数n) { 函数体 return 语句前往值 }
比C的“宽松”的地方正在于函数能够嵌套界说,然而为了一个清晰的代码构造,仍是严格要求本人的好。
这里咱们再说说援用。后面提到援用其实就是给变量取个大名(业余的话叫别号),即两个或多个变量名对应同一变量存储空间。这一律念用正在函数参数上特地有用,咱们晓得实参加形参的连系是单向值通报,即实参将它的值复制给形参,而形参变量正在函数体中可能被扭转,但因为形参变量会正在函数前往时被打消,以是形参不克不及将扭转了的值传回给实参,这是学C的人都应该非常分明的,各人都做过阿谁替换两个数的试验。这一机制保障了函数只能有一个前往值,当需求前往多个值的时分,咱们能够应用援用做形参,这相称于把实参的地点通报给函数,函数对这个地点上的数据进行操作,当然就能够把扭转保存上去。援用的概念是C++里添加的,PHP的函数也支持援用做形参。只需把C++里援用做参数的概念了解分明了,正在PHP里是齐全同样的。
PHP有微小的函数库,比方对于工夫的函数就有一年夜堆,写PHP顺序时,当你有个性能想要完成,第一件事应该是查PHP函数手册,看看有无能餍足你的要求的函数,或许是经过多个函数组合完成也行,而没有是本人入手去写(操练编程技艺或改良PHP者除了外),记住一句老话:没有要反复创造轮子。
要想把握PHP,纯熟应用罕用函数是必需的,但这没有是咱们这篇文章的指标,无机会专题探究吧。
数组
这回甭指望我说PHP的数组以及C差没有多了,由于PHP的数组,几乎就没有是C的数组!PHP的数组应该叫做“荟萃”,没有是紧迫荟萃的荟萃,是数学意思上的荟萃,假如你学过数据构造就更明确了。说白了,PHP的数组就是把一堆数据(甚么类型都行)放正在一同。这正在C里是很疯狂的设法主意,然而正在事实中是很适用的,比方一条数据库记载可能由整型、字符串型、浮点型等没有同类型的若干字段组成,假如能一次读掏出来放正在一个“数组”顶用下标拜访,是否是很不便呢?这类“数组”,是否是很像C的构造体呢?其实它比构造体还灵敏,它能够主动增减数据元素。
PHP数组的界说是经过array函数完成的,普通方式为:
$数组名=array(键名=>数据, 键名=>数据, ……, 键名=>数据);
这里的键名正在C中叫下标,C规则下标必需是整数且必需从0开端顺次递增。正在PHP里,键名十分兽性化,对应的数据假如存储的是姓名,键名就能够叫name,是问题,就能够叫score,当然你假如想用整数也能够,随你的便。假如你懒患上正在界说数组时指定键名,能够这样写:
$数组名=array(数据1, 数据2, ……, 数据n);
这时候候PHP会依照C言语的形式按数据的前后程序从0开端主动付与整型键名。
PHP提供了一个特地不便的显示数组全副元素的函数print_r
<?php $arr1=array(100,200,300,400); $arr2=array("num"=>100,"name"=>"Liuxy","score"=>98); print_r($arr1); echo "<br>"; print_r($arr2); ?>
以上代码的输入后果以下:
Array ( [0] => 100 [1] => 200 [2] => 300 [3] => 400 ) Array ( [num] => 100 [name] => Liuxy [score] => 98 )
若要界说二维数组,能够嵌套地应用array函数,同C相似,也是把二维数组的每一一行看做是一个一维数组,形成每一一行的一维数组能够互没有相反。如:
$arr=array( "row1"=>array(100,200,300,400), "row2"=>array("num"=>100,"name"=>"Liuxy","score"=>98) );
PHP数组元素的拜访同C相似,都是数组名[键名]的方式。
PHP数组的遍历能够经过foreach语句完成,foreach语句格局以下:
foreach (数组名 as 变量名) 数据元素解决语句;
翻译成C言语就是:
for (i=0;i<n; i++){变量名=a;其余蕴含“变量名”的解决语句}
foreach等价于后面的 for (i=0;i<n; i++)
as等价于“变量名”与a之间的等号,这下你明确了吧。
例如:
<?php $arr=array(1,2,3,4,5,6); foreach ($arr as $value ) echo ”$value<br>”; ?>
输入后果是甚么?想一想看。
假如还想把对应的键名也同时输入进去,能够用这样的方式:
foreach ($arr as $key=>$value) echo “键名为$key的元素值为$value”;
正在C中遍历二维数组咱们普通用二重for轮回,相应地,PHP中的foreach也能够嵌套应用,剖析一下上面的顺序你就明确了:
<?php $arr=array( "row1"=>array(100,200,300,400), "row2"=>array("num"=>100,"name"=>"Liuxy","score"=>98) ); foreach ($arr as $key=>$value) { echo "$key=>$value"; echo "<br>"; foreach ($value as $k=>$var) echo "$k=>$var<br>"; } ?>
PHP的数组元素是能够静态增进的,这是C外面没有敢想的。为数组添加一个元素很简略,同拜访数组元素同样,只不外键名是新的或许为空,如 $arr[new]=3; 或 $arr[]=3,这样做的后果是PHP为数组$arr添加一个键名为new的元素其值为3,若键名为空,则以以后整型键名的最年夜值加1作为默许的键名调配给新的元素。PHP的这类静态增进数组有时分很不便,但也带来隐患,比方当咱们希图修正已存正在的元素值而写错了键名时,就变为了新增一个元素,而这样的逻辑谬误,零碎是没有会报错的。
能够增进就能够缩减,要想删除了一个数组元素,能够应用unset函数,如删除了下面新增的阿谁元素,能够写成 unset($arr[new])。也能够应用unset函数删除了整个数组构造,如unset($arr),要留意这同一一删除了全副数组元素没有同,后者还保存无数组的构造。抽象地说,后者是室迩人遐,但楼还正在,前者连楼也撤除了。无意思的是删除了数组全副元素后假如新增一个元素,它的默许键名将连续以前数组的最年夜键名递增,要想从0开端,能够应用array_values函数重置,如$arr=array_values($arr)。
提示各人的是,PHP为数组的排序、查找、兼并、拆分提供了年夜量函数,用到这些根本算法时,不必再去翻数据构造讲义了,呵呵……
这个专题次要把精力集中正在PHP的根本语法上,经过与C的比照来加深了解,有不少细节成绩未深化探讨。学习任何货色都是一个螺旋回升的进程,咱们先阅读一下常识脉络,更多的需求正在理论中去领会。
下一个专题咱们是否是钻研一下PHP5的面向工具?你可能会说“我没学过C++”,不妨事,这回咱们没有比拟了,C++的面向工具概念是一切言语中最复杂的,而PHP5的面向工具因为是从适用登程以是比拟简明,你无妨先学PHP5的面向工具,了解面向工具的概念,而后再去啃C++的OOP吧。
更多相干常识,请存眷 PHP中文网!!
以上就是php与c语法的区分是甚么?的具体内容,更多请存眷资源魔其它相干文章!
抱歉,评论功能暂时关闭!