① 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算不上一種語言。就好像說「射釘器是世界上最好的武器」一樣。