百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>网页制作> 带你深入理解php与C说话的区别
分享文章到:

带你深入理解php与C说话的区别

发布时间:09/01 来源:未知 浏览: 关键词:

假如你学过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内容到剪贴板

PHP代码:

 <?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内容到剪贴板

PHP代码:

<?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内容到剪贴板

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内容到剪贴板

PHP代码:

<?php
$a="newname";
$$a="content";   //newname本是$a的值,但是$$a的含义是以$a的值为名的变量
echo $newname; //$$a等价于$newname
echo $a;
?>

运算符和表达式

PHP在运算符和表达式方面和C极其相似,有算术、逻辑、关系、位运算符及响应的表达式,也有前提运算符(:?)及其表达式,一样还是我们开端提到的阿谁思想,有用为上,许多限制被取消了,相对较宽松。举个例子:

复制PHP内容到剪贴板

PHP代码:

<?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内容到剪贴板

PHP代码:
 
<?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相似,也是把二维数组的每一行看作是一个一维数组,构成每一行的一维数组可以互不雷同。如:

复制PHP内容到剪贴板

PHP代码:

$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内容到剪贴板

PHP代码:

<?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内容到剪贴板

PHP代码:

<?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吧。

感激大家的阅读,但愿大家收益很多。

本文转自: https://blog.csdn.net/ailxxiaoli/article/details/52199337

引荐教程:《php教程》

以上就是带你深入理解php与C说话的不同的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板