① php大小写问题:函数名和类名不区分,变量名区分
PHP对大小写敏感问题的处理比较乱,写代码时可能偶尔出问题,所以这里总结一下。
但我不是鼓励大家去用这些规则。推荐大家始终坚持“大小写敏感”,遵循统一的代码规范。
1.
变量名区分大小写
复制代码
代码如下:
<?php
$abc
=
'abcd';
echo
$abc;
//输出
'abcd'
echo
$aBc;
//无输出
echo
$ABC;
//无输出
2.
常量名默认区分大小写,通常都写为大写
(但没找到能改变这个默认的配置项,求解)
复制代码
代码如下:
<?php
define("ABC","Hello
World");
echo
ABC;
//输出
Hello
World
echo
abc;
//输出
abc
3.
php.ini配置项指令区分大小写
如
file_uploads
=
1
不能写成
File_uploads
=
1
4.
函数名、方法名、类名不区分大小写
但推荐使用与定义时相同的名字
复制代码
代码如下:
<?php
function
show(){
echo
"Hello
World";
}
show();
//输出
Hello
World
推荐写法
SHOW();
//输出
Hello
World
复制代码
代码如下:
<?php
class
cls{
static
function
func(){
echo
"hello
world";
}
}
Cls::FunC();
//输出hello
world
5.
魔术常量不区分大小写,推荐大写
包括:__LINE__、__FILE__、__DIR__、__FUNCTION__、__CLASS__、__METHOD__、__NAMESPACE__。
复制代码
代码如下:
<?php
echo
__line__;
//输出
2
echo
__LINE__;
//输出
3
6.
NULL、TRUE、FALSE不区分大小写
复制代码
代码如下:
<?php
$a
=
null;
$b
=
NULL;
$c
=
true;
$d
=
TRUE;
$e
=
false;
$f
=
FALSE;
var_mp($a
==
$b);
//输出
boolean
true
var_mp($c
==
$d);
//输出
boolean
true
var_mp($e
==
$f);
//输出
boolean
true
PHP变量名区分大小写,函数名不区分大小写,经常被新手忽视的小细节,测试如下.
PHP变量名区分大小写测试:
复制代码
代码如下:
<?php
$aaa
=
"jb51.net";
$AAA
=
"JB51.CN";
echo
$aaa.'-'.$AAA;
//jb51.net-JB51.CN
?>
PHP函数名不区分大小写测试:
复制代码
代码如下:
<?php
function
bbb(){
echo
'abc';
}
function
BBB(){
echo
"Abc";
}
?>
上面这段代码会报错:(
!
)
Fatal
error:
Cannot
redeclare
BBB()
② php中的类有什么用和自定义函数有什么区别
请看PHP手册18章,里面的内容你看了就明白。
第18章类与对象(PHP4)
目录
类
继承
构造函数
范围解析操作符(::)
parent
序列化对象-会话中的对象
魔术函数__sleep和__wakeup
构造函数中的引用
对象的比较
类
类是变量与作用于这些变量的函数的集合。使用下面的语法定义一个类:
<?php
classCart{
var$items;//购物车中的物品
//将$num个$artnr物品加入购物车
functionadd_item($artnr,$num){
$this->items[$artnr]+=$num;
}
//将$num个$artnr物品从购物车中取出
functionremove_item($artnr,$num){
if($this->items[$artnr]>$num){
$this->items[$artnr]-=$num;
returntrue;
}elseif($this->items[$artnr]==$num){
unset($this->items[$artnr]);
returntrue;
}else{
returnfalse;
}
}
}
?>
上面的例子定义了一个Cart类,这个类由购物车中的商品构成的数组和两个用于从购物车中添加和删除商品的函数组成。
警告
不能将一个类的定义分割到多个文件中。也不能将一个类的定义分割到多个PHP块中,除非该分割是在一个方法声明内部。以下用法将不起作用:
<?php
classtest{
?>
<?php
functiontest(){
print'OK';
}
}
?>
但是以下用法是可以的:
<?php
classtest{
functiontest(){
?>
<?php
print'OK';
}
}
?>
以下警告仅用于PHP4。
小心
名称stdClass已经被Zend使用并保留。不能在PHP代码中定义名为stdClass的类。
小心
函数名__sleep和__wakeup在PHP类中是魔术函数。除非想要与之联系的魔术功能,否则在任何类中都不能以此命名函数。
小心
PHP将所有以__开头的函数名保留为魔术函数。除非想要使用一些见于文档中的魔术功能,否则建议不要在PHP中将函数名以__开头。
在PHP4中,var变量的值只能初始化为常量。用非常量值初始化变量,需要一个初始化函数,该函数在对象被创建时自动被调用。这样一个函数被称之为构造函数(见下面)。
<?php
/*PHP4中不能这样用*/
classCart{
var$todays_date=date("Y-m-d");
var$name=$firstname;
var$owner='Fred'.'Jones';
/*不过包含有常量的数组可以*/
var$items=array("VCR","TV");
}
/*应该这样进行*/
classCart{
var$todays_date;
var$name;
var$owner;
var$items=array("VCR","TV");
functionCart(){
$this->todays_date=date("Y-m-d");
$this->name=$GLOBALS['firstname'];
/*etc...*/
}
}
?>
类也是一种类型,就是说,它们是实际变量的蓝图。必须用new运算符来创建相应类型的变量。
<?php
$cart=newCart;
$cart->add_item("10",1);
$another_cart=newCart;
$another_cart->add_item("0815",3);
?>
上述代码创建了两个Cart类的对象$cart和$another_cart,对象$cart的方法add_item()被调用时,添加了1件10号商品。对于对象$another_cart,3件0815号商品被添加到购物车中。
$cart和$another_cart都有方法add_item(),remove_item()和一个items变量。它们都是明显的函数和变量。可以把它们当作文件系统中的某些类似目录的东西来考虑。在文件系统中,可以拥有两个不同的README.TXT文件,只要不在相同的目录中。正如从为了根目录访问每个文件需要输入该文件的完整的路径名一样,必须指定需要调用的函数的完整名称:在PHP术语中,根目录将是全局名字空间,路径名符号将是->。因而,名称$cart->items和$another_cart->items命名了两个不同的变量。注意变量名为$cart->items,不是$cart->$items,那是因为在PHP中一个变量名只有一个单独的美元符号。
<?php
//正确,只有一个$
$cart->items=array("10"=>1);
//不正确,因为$cart->$items变成了$cart->""
$cart->$items=array("10"=>1);
//正确,但可能不是想要的结果:
//$cart->$myvar变成了$cart->items
$myvar='items';
$cart->$myvar=array("10"=>1);
?>
在定义类的时候,无法得知将使什么名字的对象来访问:在编写Cart类时,并不知道之后对象的名称将会命名为$cart或者$another_cart。因而你不能在类中使用$cart->items。然而为了类定义的内部访问自身的函数和变量,可以使用伪变量$this来达到这个目的。$this变量可以理解为“我自己的”或者“当前对象”。因而'$this->items[$artnr]+=$num'可以理解为“我自己的物品数组的$artnr计数器加$num”或者“在当前对象的物品数组的$artnr计数器加$num”。
注意:伪变量$this通常未定义,如果其所在的方法是被静态调用的话。但这不是个严格规定:如果一个方法被从另一个对象内静态调用的话,则$this会被定义。此时$this的值是那个发出调用的对象。用下例演示:
<?php
classA
{
functionfoo()
{
if(isset($this)){
echo'$thisisdefined(';
echoget_class($this);
echo")\n";
}else{
echo"\$thisisnotdefined.\n";
}
}
}
classB
{
functionbar()
{
A::foo();
}
}
$a=newA();
$a->foo();
A::foo();
$b=newB();
$b->bar();
B::bar();
?>
上例将输出:
$thisisdefined(a)
$thisisnotdefined.
$thisisdefined(b)
$thisisnotdefined.注意:有一些不错的函数用来处理类和对象。应该关注一下类/对象函数。
③ 在php 命名空间 可以使用关键词作为函数名吗
PHP 命名空间提供了一种将相关的类、函数和常量组合到一起的途径,有点类似于文件管理器中,按照不同的文件夹来管理文件。根据 PHP 手册:
在PHP中,命名空间用来解决在编写类库或应用程序时创建可重用的代码如类或函数时碰到的两类问题:
用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。
在 php 命名空间中,语法等等都依旧遵循原有规则,因此,关键词不可以使用作为函数名。
④ php的函数名可以包含数字吗
1.函数名能够以字母或下划线开头(而非数字)。
2.函数名对大小写不敏感。
3.函数名应该能够反映函数所执行的任务。
⑤ PHP为什么说是最好的编程语言
尝试网络”PHP是最好的语言”,发现指向较多的是那个关于程序员的笑话。 但是如果这个梗来自于这个笑话的话,那么为什么在笑话里这个程序员不说C++/python/haskell或者别的什么语言是最好的而要说PHP是最好的呢?所以感觉似乎最早的出处不在于此。 有人知道吗?
来看看知乎网友们是怎么看待这场语言之争的吧!
网友回答
网友A
“为什么在笑话里这个程序员不说 C++ / Python / Haskell 或者别的什么语言是最好的而要说 PHP是最好的呢?”——因为说任何其他语言“最好”都并不好笑啊。
任何掌握超过两种以上非 PHP 编程语言且具有一定常识的程序员都会本能地意识到 PHP 的问题所在,曾经有一篇汇总性的文章在此: PHP: a fractal of bad design / fuzzy notepad (译文版可见:五大受损, 全面解析PHP的糟糕设计,但翻译得很烂),历陈 PHP 破败之处,激荡深远。如果你没时间去读那篇长文,那我告诉你一个简单的例子来说明 PHP 有多匪夷所思:PHP 的核心函数命名很不一致,有 “strptime”这样类 C 函数的名字,有“nl2br”这样的简写,却也有“htmlspecialchars”这样的长名。后来人们发现这种不一致并非偶然,而是当 PHP 还是只有不到一百个函数的小语言的时候,其作者决定用函数名的字符数量——来作为函数的 hash(!)。由于这个愚不可及的决定,PHP 的函数名长度要尽可能地长短有秩、均匀分布,影响一直延续至今。甚至有好事者将上述文中:
You pull out the hammer, but to your dismay, it has the claw part on both sides.这一句严肃对待,做了一把 PHP 锤子:
试想你走进五金从业者公会的啤酒馆,看到墙上挂着从钉子到电动螺丝刀的各式工具当作陈列品,而你在端详一阵之后指着其中的这样一把锤子,说“啊,这是最好的工具”,你觉得酒馆里的人会是什么反应呢?
网友B
因为php和最好的语言几乎没有关系。。一般用来讽刺一些没见过世面,把自己归属于某一种编程语言的语言教徒。
事实上每一门语言都有其设计的灵魂,有它的取舍。很难说什么是最好的。比起做个脑残粉总是鼓吹自己擅长的语言,不如多学几门语言,开阔视野。
我们都喜欢分享自己的价值观。希望被认可,希望有更多同伴。其实这也是在给身边的人洗脑,这很正常。但有时候自己在某一领域的付出会成为枷锁。
网友C
Windows 是最好的操作系统!
以上为纯吐槽。
我看楼上还有很多还在讨论PHP不是最好的语言,还好我不是程序员,只是稍微懂一点代码,我认为之所以说这个梗,是因为PHP最普及和最流行,大多数不管懂不懂程序都知道或听说过,所以才能引起共鸣。这就是我上面那句吐槽的含义。
如果上面那句吐槽改为:Ubuntu 是最好的操作系统!(围观群众:What?)
网友D
难道不是这么来的?某女:你能让这个论坛的人都吵起来,我今晚就跟你走.
某软件工程师:PHP是最好的语言!
某论坛炸锅了,各种吵架…
某女:服了你了,我们走吧 你想干啥都行.
某软件工程师:今天不行,我一定要说服他们,PHP必须是最好的语言
某女:…….
网友E
编程语言之争由来已久,
但是php和java确实是最受争议的。
自从web2.0热起来后,java逐渐淡出了。
究其原因并不在于语言本身,
而在于用语言的人。
因为php确实简单,门槛最低,
所以很多并不适合编程的人涌了进来,仅仅为了糊口罢了。
这些人的各种无敌言论自然让很多专业的人呲之以鼻。
天龙八部里有个星宿派,
虽然在施毒方面有些特长,但门下弟子总的来说武艺平平,
其实江湖武功低微的人多的是,低调便是了,谁又老是盯着你呢?
然而这个新宿派却偏偏跑出去招摇过市,胡吹本门派武功盖世,大有傲视天下之势,
那么其他门派的人会怎么看他们呢?
php就是语言江湖的星宿派。
网友F
对我来说PHP 就是最好的语言。它不是炫耀技巧、扯蛋概念的东西。完成任务才是程序员要做的事。没什么语言可以高效开发同时高效运行。
相关利益:写PHP17年。
网友G
作为一个十多年老phper,看到这句话,也会笑。虽然我也会c c++ java go ,并都做有相应产品。 世界上一半以上的网站是php, bat, fb,处处有它。但这些大公司在近些年,都在试图改造它。淘宝去php改java,网络重写扩展,fb搞xhp等等。但结局是搞了这么些,这几大公司却收效甚微。比之前的性能提升不了太多。在我理解看来,无非是想提高一下b格而已。
在php的初始阶段,php是连框架也没有的。直到今天,php创始人lerdorf仍然反对mvc,因为他觉得影响了性能。在那个年代,同样的一个应用,做java的待遇比php高一倍。因为php简单。如果跟你说一个人花了一个星期用php写了个论坛,跑得也还蛮好,你一点也不要惊讶,后来这个论坛还卖给了阿里。面向过程的php,成就了无数小的站点。
后来是一个框架辈出的阶段,phper们终于也有了跟java一样的mvc,待遇也慢慢接近于java了。大家明白了一件事,大项目,得有点高深的学术内涵才能忽悠的住。opp也更加规范了,你能找到的设计模式,php全都有,于是phper放言:你还敢说php不高级, 不入流? 而实际上,设计模式,真正能用到的就那么一两个。对于解析性语言,我只能,呵呵。
归结一下,php,我觉得更像屌丝逆袭。 然后,笑的人有两种,一种是屌丝的自嘲,另一种是高富帅的妒忌。
网友H
先说一下php的优点:
跟py相比,它不需要django之类的库,原生就支持web。小白们不需要配置什么东西,门槛就低了。而且php的语法是类C的,函数命名大部分也是类C的,大部分码农在学校或多或少都学过C/C++,接触php肯定要比py顺手。
跟java相比,支持php的主机显然更多。云主机兴起之前,是个虚拟主机都是lamp,都支持php。而虚拟主机是最便宜的解决方案,也就是说随便租个虚拟主机就能跑php的网站,成本就低了。
我个人认为没有什么最好的语言,只有最合适的语言。php之所以在web2.0的时代异军突起,击败了py,原因跟php坑不坑没有关系,跟契机有关系,跟他在那个环境下合不合适有关系。把php的流行归功于什么最好的语言简直是胡扯,也是没动脑子。
网友H
大部分敢于说自己是最好的语言的语言,至少有一部分人是真这么认为的。
比如说C语言最好的,最差最差也有一部分C语言核心开发者有信心这么说。
但是PHP语言是一个连开发者都不敢‘声称是最好的语言’的语言。
这是不言自明的公设,不需要证明。
小圈子有个笑话。
会不会用PHP是有一个明确判断标准的:
只有觉得PHP是个烂语言,才有资格说“我会PHP”。
如果你连PHP有多烂都感觉不出来,请别说“我会PHP”“我会编程”。
网友J
因为php算不上一种语言。就好像说“射钉器是世界上最好的武器”一样。