一砚尽、開發(fā)環(huán)境
學(xué)習(xí)一門語言,首先要搞定的就是環(huán)境的配置
想要比較開心的開發(fā)php辉词,你就需要搞定這幾個(gè)
- PHP
- Apache
- MySQL
具體的環(huán)境配置自行百度
這里給出幾種集成環(huán)境的選擇 - phpstudy
- WAMPSERVER
- appserv
以上幾種都是在windows下的集成環(huán)境
在linux下的環(huán)境配置如果有需要的可以聯(lián)系我必孤,在這里就不講了
二、編輯器
推薦幾款編輯器
- notepad++
- sublime text
- Atom
- editplus
根據(jù)個(gè)人喜好選擇瑞躺,重點(diǎn)是下面的
三敷搪、php簡(jiǎn)介
php是世界上最好的語言(yes or no?)
那么,php到底是不是世界上最好的語言呢幢哨,其實(shí)不是的赡勘。
三個(gè)程序員坐在格子間里編程。
一個(gè)程序員一言不發(fā)捞镰,他用的是python.
一個(gè)程序員寫一會(huì)兒就按一下編譯闸与,然后就玩會(huì)兒手機(jī)。他用的是C++岸售。
一個(gè)程序員坐在那里瀏覽網(wǎng)頁践樱,不時(shí)飛快的鍵入一些字符。
經(jīng)理看到凸丸,怒道:你怎么不干活拷邢,盡在上網(wǎng)。
回答:我在查實(shí)現(xiàn)這個(gè)功能需要用什么函數(shù)屎慢。
他用的是PHP.
php語言的劣勢(shì):
http://m.oschina.net/question/1579_49262
(想要深入了解php特性的可以看一下這篇文章)
基于以上特點(diǎn)瞭稼,我們基本可以得出一個(gè)結(jié)論:php不是所謂的最優(yōu)語言。
但我們?yōu)槭裁匆獙W(xué)習(xí)php呢腻惠?
1环肘、開源性和免費(fèi)性。由于PHP的解釋器的源代碼是公開的集灌,所以安全系數(shù)較高的網(wǎng)站可以自己更改PHP的解釋程序悔雹。另外,PHP運(yùn)行環(huán)境的使用也是免費(fèi)的绝页。
2、跨平臺(tái)性強(qiáng)寂恬。由于PHP的解釋器是開源的续誉,所以能夠在所有的操作系統(tǒng)平臺(tái)上非常穩(wěn)定地運(yùn)行,這使它成為常用的服務(wù)器語言初肉。
3酷鸦、快捷性。PHP是一種非常容易學(xué)習(xí)和使用的一門語言,它的語法特點(diǎn)類似于C語言臼隔,但又沒有C語言復(fù)雜的地址操作嘹裂,而且又加入了面向?qū)ο蟮母拍睿偌由纤哂泻?jiǎn)潔的語法規(guī)則摔握,使得它操作編輯非常簡(jiǎn)單寄狼,實(shí)用性很強(qiáng)。
4氨淌、面向過程和面向?qū)ο蟛⒂貌蠢ⅰT赑HP語言的使用中,可以分別使用面向過程和面向?qū)ο笫⒄铱梢詫HP面向過程和面向?qū)ο髢烧咭黄鸹煊蒙驹郏@是其他很多編程語言是做不到的。
5豪筝、運(yùn)行高效性痰滋。由于PHP運(yùn)行在相應(yīng)的平臺(tái)解釋器上,消耗系統(tǒng)資源比較少续崖,運(yùn)行的環(huán)境簡(jiǎn)單敲街,所以效率就很高。
6袜刷、數(shù)據(jù)庫連接的廣泛性聪富。PHP可以與很多主流的數(shù)據(jù)庫建立起連接,如MySQL著蟹、ODBC墩蔓、Oracle陕赃、AdabasD跨跨、S等缩搅,PHP是利用編譯的不同函數(shù)與這些數(shù)據(jù)庫建立起連接的晋柱,PHPLIB就是常用的為一般事務(wù)提供的基庫芦鳍。
四更哄、php代碼規(guī)范
格式
PHP 腳本可放置于文檔中的任何位置闪萄, 以<?php 開頭誊涯,以 ?>結(jié)束
<?php // 這里是PHP 代碼 ?>
實(shí)例
<!DOCTYPE html>
<html>
<body>
<h1>看看下面PHP的結(jié)果是什么</h1>
<?php echo "hello, world"; ?>
</body>
</html>```
>大小寫敏感與否
* 用戶定義的函數(shù)洪鸭、類和關(guān)鍵字
在 PHP 中样刷,所有用戶定義的函數(shù)、類和關(guān)鍵字(例如 if览爵、else置鼻、echo 等等)都對(duì)大小寫不敏感。在下面的例子中蜓竹,所有這三天 echo 語句都是合法的(等價(jià)):
<!DOCTYPE html>
<html>
<body>
<?php
ECHO "Hello World!
";
echo "Hello World!
";
EcHo "Hello World!
";
?>
</body>
</html>
* PHP 變量:
變量以 $ 符號(hào)開頭箕母,其后是變量的名稱
變量名稱必須以字母或下劃線開頭储藐,變量名稱不能以數(shù)字開頭,變量名稱只能包含字母數(shù)字字符和下劃線(A-z嘶是、0-9 以及 _)變量名稱*對(duì)大小寫敏感* ($y 與 $Y 是兩個(gè)不同的變量)
實(shí)例:
<!doctype html>
<html>
<body>
<?php
$x=6;
$y=7;
$z=$x+$y;
echo $z;
?>
</body>
</html>```
五钙勃、php基本語法
數(shù)據(jù)類型
在PHP中,支持8種原始類型聂喇,其中包括四種標(biāo)量類型辖源、兩種復(fù)合類型和兩種特殊類型。
String(字符串), Integer(整型), Float(浮點(diǎn)型), Boolean(布爾型),
Array(數(shù)組), Object(對(duì)象),
NULL(空值),resource(資源)
String
字符串是由一系列字符組成授帕,在PHP中同木,字符和字節(jié)一樣,也就是說跛十,一共有256種不同字符的可能性彤路。字符串型可以用三種方法定義:?jiǎn)我?hào)形式、雙引號(hào)形式和Heredoc結(jié)構(gòu)形式芥映。-
當(dāng)字符串中包含引號(hào)的時(shí)候洲尊,有三種解決方案:
- 在單引號(hào)中嵌入雙引號(hào)
- 在雙引號(hào)中嵌入單引號(hào)
- 使用轉(zhuǎn)義符“\”
-
當(dāng)引號(hào)中包含『$』符號(hào)時(shí),該怎么辦奈偏?
- 當(dāng)雙引號(hào)中包含變量時(shí)坞嘀,變量會(huì)與雙引號(hào)中的內(nèi)容連接在一起;
- 當(dāng)單引號(hào)中包含變量時(shí)惊来,變量會(huì)被當(dāng)做字符串輸出丽涩。
當(dāng)字符串很長(zhǎng)時(shí)怎么辦?
我們可以使用Heredoc結(jié)構(gòu)形式的方法來解決該問題,首先使用定界符表示字符串(<<<)裁蚁,接著在“<<<“之后提供一個(gè)標(biāo)識(shí)符GOD矢渊,然后是字符串,最后以提供的這個(gè)標(biāo)識(shí)符結(jié)束字符串枉证。如下:
<?php
$string1 = <<<GOD
我有一只小毛驢矮男,我從來也不騎。
有一天我心血來潮室谚,騎著去趕集毡鉴。
我手里拿著小皮鞭,我心里正得意秒赤。
不知怎么嘩啦啦啦啦猪瞬,我摔了一身泥.
GOD;
echo $string1;
?>
在賦值符號(hào)后,輸入定界符“<<<”,接著是標(biāo)識(shí)符入篮,你可以用你的女神作為標(biāo)識(shí)符“GOD”陈瘦,如第2行,也可以使用你喜歡的狗 狗崎弃,“DOG”作為標(biāo)識(shí)符甘晤,但是,結(jié)尾處的標(biāo)識(shí)符也必須是一樣的饲做。此外线婚,在結(jié)尾的一行,如第7行盆均,一定要另起一行塞弊,并且此行除了“GOD”,并以“泪姨;”號(hào) 結(jié)束之外游沿,不能有任何其他字符,前后都不能有肮砾,包括空格诀黍,否則會(huì)出現(xiàn)錯(cuò)誤的
<?php
$x = "Hello world!";
echo $x;
echo "<br>";
$x = 'Hello world!';
echo $x;
?>
- Integer
- 整數(shù)必須至少有一個(gè)數(shù)字 (0-9)
- 整數(shù)不能包含逗號(hào)或空格
- 整數(shù)是沒有小數(shù)點(diǎn)的
- 整數(shù)可以是正數(shù)或負(fù)數(shù)
- 整型可以用三種格式來指定:十進(jìn)制, 十六進(jìn)制( 以 0x 為前綴)或八進(jìn)制(前綴為 0)
<?php
$x = 5985;
var_dump($x);
echo "<br>";
$x = -345; // 負(fù)數(shù)
var_dump($x);
echo "<br>";
$x = 0x8C; // 十六進(jìn)制數(shù)
var_dump($x);
echo "<br>";
$x = 047; // 八進(jìn)制數(shù)
var_dump($x);
?>
- Array
<?php
$cars=array("Volvo","BMW","Toyota");
var_dump($cars);
?>
- Object
對(duì)象數(shù)據(jù)類型也可以用于存儲(chǔ)數(shù)據(jù)仗处。
在 PHP 中眯勾,對(duì)象必須聲明。
首先婆誓,你必須使用class關(guān)鍵字聲明類對(duì)象吃环。類是可以包含屬性和方法的結(jié)構(gòu)。
然后我們?cè)陬愔卸x數(shù)據(jù)類型洋幻,然后在實(shí)例化的類中使用數(shù)據(jù)類型:
<?php
class Car
{
var $color;
function Car($color="green") {
$this->color = $color;
}
function what_color() {
return $this->color;
}
}
?>
- 第一種特殊類型---資源 resource
資源(resource):資源是由專門的函數(shù)來建立和使用的郁轻,例如打開文件、數(shù)據(jù)連接文留、圖形畫布好唯。我們可以對(duì)資源進(jìn)行操作(創(chuàng)建、使用和釋放)厂庇。任何資 源渠啊,在不需要的時(shí)候應(yīng)該被及時(shí)釋放。如果我們忘記了釋放資源权旷,系統(tǒng)自動(dòng)啟用垃圾回收機(jī)制替蛉,在頁面執(zhí)行完畢后回收資源,以避免內(nèi)存被消耗殆盡拄氯。
<?php
//首先采用“fopen”函數(shù)打開文件躲查,得到返回值的就是資源類型。
$file_handle = fopen("/data/webroot/resource/php.f.txt","r");
if ($file_handle){
//接著采用while循環(huán)(后面語言結(jié)構(gòu)語句中的循環(huán)結(jié)構(gòu)會(huì)詳細(xì)介紹)一行行地讀取文件译柏,然后輸出每行的文字
while (!feof($file_handle)) { //判斷是否到最后一行
$line = fgets($file_handle); //讀取一行文本
echo $line; //輸出一行文本
echo "<br />"; //換行
}
}
fclose($file_handle);//關(guān)閉文件
?>
- 第二種特殊類型---空類型(NULL)
NULL(NULL):NULL是空類型镣煮,對(duì)大小寫不敏感,NULL類型只有一個(gè)取值鄙麦,表示一個(gè)變量沒有值典唇,當(dāng)被賦值為NULL镊折,或者尚未被賦值,或者被unset()介衔,這三種情況下變量被認(rèn)為為NULL恨胚。
php常量
PHP中的常量分為系統(tǒng)常量和自定義常量。
- 系統(tǒng)常量
PHP已經(jīng)定義好的常量炎咖,我們可以直接拿來使用赃泡,常見的系統(tǒng)常量有:- FILE :php程序文件名。它可以幫助我們獲取當(dāng)前文件在服務(wù)器的物理位置乘盼。
- LINE :PHP程序文件行數(shù)升熊。它可以告訴我們,當(dāng)前代碼在第幾行绸栅。
- PHP_VERSION:當(dāng)前解析器的版本號(hào)级野。它可以告訴我們當(dāng)前PHP解析器的版本號(hào),我們可以提前知道我們的PHP代碼是否可被該P(yáng)HP解析器解析粹胯。
- PHP_OS:執(zhí)行當(dāng)前PHP版本的操作系統(tǒng)名稱勺阐。它可以告訴我們服務(wù)器所用的操作系統(tǒng)名稱,我們可以根據(jù)該操作系統(tǒng)優(yōu)化我們的代碼矛双。
- 常量如何使用渊抽?
定義了常量,那么就要使用常量议忽,那么如何獲取常量值呢懒闷?
獲取常量值的有兩種方法取值。- 第一種是使用常量名直接獲取值栈幸;例如計(jì)算圓周率的面積愤估,如下:
<?php
define("PI",3.14);
$r=1;
$area = PI*$r*$r; //計(jì)算圓的面積
?>
- 第二種是使用constant()函數(shù)。它和直接使用常量名輸出的效果是一樣的速址,但函數(shù)可以動(dòng)態(tài)的輸出不同的常量玩焰,在使用上要靈活、方便芍锚,其語法格式如下:
mixed constant(string constant_name)
第一個(gè)參數(shù)constant_name為要獲取常量的名稱昔园,也可為存儲(chǔ)常量名的變量。如果成功則返回常量的值并炮,失敗則提示錯(cuò)誤信息常量沒有被定義默刚。(注:mixed表示函數(shù)返回值類型為多種不同的類型,string表示參數(shù)類型為字符串類型)
<?php
$p="";
//定義圓周率的兩種取值
define("PI1",3.14);
define("PI2",3.142);
//定義值的精度
$height = "中";
//根據(jù)精度返回常量名逃魄,將常量變成了一個(gè)可變的常量
if($height == "中"){
$p = "PI1";
}else if($height == "低"){
$p = "PI2";
}
$r=1;
$area = constant($p)*$r*$r;
echo $area;
?>
- 如何判定常量是否被定義
如果常量被重復(fù)定義以后荤西,PHP解析器會(huì)發(fā)出“Constant XXX already defined”的警告,提醒我們?cè)摮A恳呀?jīng)被定義過。那么邪锌,在團(tuán)隊(duì)開發(fā)勉躺,或代碼量很大的情況下,我們?nèi)绾稳ヅ卸ㄒ粋€(gè)常量是否被定義呢觅丰?
defined()函數(shù)可以幫助我們判斷一個(gè)常量是否已經(jīng)定義赂蕴,其語法格式為:
bool defined(string constants_name)
它只有參數(shù)constant_name,指的是要獲取常量的名稱舶胀,若存在則返回布爾類型true,否則返回布爾類型false;
// PHP5以后可以用來定義常量的方法
const value1 = 10;
echo value1;
echo "<br>";
// PHP5之前定義常量的方法
define("value2",20);
echo value2;
define() 函數(shù) - 有三個(gè)參數(shù):首個(gè)參數(shù)定義常量的名稱第二個(gè)參數(shù)定義常量的值可選的第三個(gè)參數(shù)規(guī)定常量名是否對(duì)大小寫敏感碧注。默認(rèn)是 false嚣伐。
有關(guān)字符串處理的一些函數(shù)
$str = "Hello PHP";
//strlen() 函數(shù)返回字符串的長(zhǎng)度,以字符計(jì)萍丐。
//獲取指定字符在字符串中的位置
echo strpos($str,"P")."<br>";
//截取指定位置的字符串(從第2個(gè)字符到最后)
$str1 = substr($str,2);
//截取指定位置的字符串(從第2個(gè)字符開始往后截取3位)
$str2 = substr($str,2,2);
//以指定間距分割字符串
$str3 = str_split($str);
$str4 = str_split($str,2);
print_r($str4)."<br>";
//以指定字符分割字符串
$str = "PHP JAVA JS HTML CSS";
$str5 = explode(" ",$str);
print_r($str5)."<br>";
運(yùn)算符
- 四則運(yùn)算符
- , - , * , / , %
賦值運(yùn)算符
"=" : 把右邊表達(dá)式的值賦給左邊的運(yùn)算數(shù)轩端。它將右邊表達(dá)式值復(fù)制一份,交給左邊的運(yùn)算數(shù)逝变。換而言之基茵,首先給左邊的運(yùn)算數(shù)申請(qǐng)了一塊內(nèi)存,然后把復(fù)制的值放到這個(gè)內(nèi)存中壳影。
"&" : 引用賦值拱层,意味著兩個(gè)變量都指向同一個(gè)數(shù)據(jù)。它將使兩個(gè)變量共享一塊內(nèi)存宴咧,如果這個(gè)內(nèi)存存儲(chǔ)的數(shù)據(jù)變了根灯,那么兩個(gè)變量的值都會(huì)發(fā)生變化。比較運(yùn)算符
幾乎所有的內(nèi)置函數(shù)以及基本結(jié)構(gòu)中都使用了很多松散的比較和轉(zhuǎn)換掺栅,防止程序中的變量因?yàn)槌绦騿T的不規(guī)范而頻繁的報(bào)錯(cuò)烙肺,然而這卻帶來了安全問題
想要了解更多,可以訪問
http://php.net/manual/zh/types.comparisons.php
邏輯運(yùn)算符
and 邏輯與
&& 邏輯與
or 邏輯或
|| 邏輯或
xor 邏輯異或
氧卧! 邏輯非字符串連接運(yùn)算符
連接運(yùn)算符("."): 它返回將右參數(shù)附加到左參數(shù)后面所得的字符串桃笙。
連接賦值運(yùn)算符(".="): 它將右邊的參數(shù)附加到左邊的參數(shù)后。錯(cuò)誤控制運(yùn)算符
PHP中提供了一個(gè)錯(cuò)誤控制運(yùn)算符“@”沙绝,對(duì)于一些可能會(huì)在運(yùn)行過程中出錯(cuò)的表達(dá)式時(shí)搏明,我們不希望出錯(cuò)的時(shí)候給客戶顯示錯(cuò)誤信息,這樣對(duì)用戶不友好闪檬。于是熏瞄,可以將@放置在一個(gè)PHP表達(dá)式之前,該表達(dá)式可能產(chǎn)生的任何錯(cuò)誤信息都被忽略掉谬以;
如果激活了track_error(這個(gè)玩意在php.ini中設(shè)置)特性强饮,表達(dá)式所產(chǎn)生的任何錯(cuò)誤信息都被存放在變量$php_errormsg中,此變量在每次出錯(cuò)時(shí)都會(huì)被覆蓋为黎,所以如果想用它的話必須盡早檢查邮丰。
需要注意的是:錯(cuò)誤控制前綴“@”不會(huì)屏蔽解析錯(cuò)誤的信息行您,不能把它放在函數(shù)或類的定義之前,也不能用于條件結(jié)構(gòu)例如if和foreach等剪廉。
<?php
$conn = @mysql_connect("localhost","username","password");
echo "出錯(cuò)了娃循,錯(cuò)誤原因是:".$php_errormsg;
?>
PHP foreach 循環(huán)
<?php
$colors = array("red","green","blue","yellow");
foreach ($colors as $value) {
echo "$value <br>";
}
?>
關(guān)聯(lián)數(shù)組的概念(鍵值對(duì))
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
$age['Peter']="35";
$age['Ben']="37";
$age['Joe']="43";
在PHP中foreach循環(huán)語句,常用于遍歷關(guān)聯(lián)數(shù)組斗蒋,一般有兩種使用方式:不取下標(biāo)捌斧、取下標(biāo)。
- 只取值泉沾,不取下標(biāo)
<?php
foreach (數(shù)組 as 值){
//執(zhí)行的任務(wù)
}
?>
示例:
<?php
$students = array(
'2010'=>'令狐沖',
'2011'=>'林平之',
'2012'=>'曲洋',
'2013'=>'任盈盈',
'2014'=>'向問天',
'2015'=>'任我行',
'2016'=>'沖虛',
'2017'=>'方正',
'2018'=>'岳不群',
'2019'=>'寧中則',
);//10個(gè)學(xué)生的學(xué)號(hào)和姓名捞蚂,用數(shù)組存儲(chǔ)
//使用循環(huán)結(jié)構(gòu)遍歷數(shù)組,獲取學(xué)號(hào)和姓名
foreach($students as $key)
{
echo $key;
echo "<br />";
}
?>
同時(shí)取下標(biāo)和值
<?php
foreach (數(shù)組 as 下標(biāo) => 值){
//執(zhí)行的任務(wù)
}
?>
示例:
<?php
$students = array(
'2010'=>'令狐沖',
'2011'=>'林平之',
'2012'=>'曲洋',
'2013'=>'任盈盈',
'2014'=>'向問天',
'2015'=>'任我行',
'2016'=>'沖虛',
'2017'=>'方正',
'2018'=>'岳不群',
'2019'=>'寧中則',
);//10個(gè)學(xué)生的學(xué)號(hào)和姓名,用數(shù)組存儲(chǔ)
//使用循環(huán)結(jié)構(gòu)遍歷數(shù)組,獲取學(xué)號(hào)和姓名
foreach($students as $key => $value)
{
echo $value; //輸出(打吁尉俊)姓名
echo "<br />";
}
?>
PHP global 關(guān)鍵詞
global 關(guān)鍵詞用于訪問函數(shù)內(nèi)的全局變量姓迅。
要做到這一點(diǎn),請(qǐng)?jiān)冢ê瘮?shù)內(nèi)部)變量前面使用 global 關(guān)鍵詞:
<?php
$x=5;
$y=10;
function myTest() {
global $x,$y;
$y=$x+$y;
}
myTest(); // 運(yùn)行函數(shù)
echo $y; // 輸出變量 $y 的新值
?>```
>PHP echo 和 print 語句
echo 和 print 之間的差異:
echo - 能夠輸出一個(gè)以上的字符串
print - 只能輸出一個(gè)字符串俊马,并始終返回 1
提示:echo 比 print 稍快丁存,因?yàn)樗环祷厝魏沃怠?
<?php
echo "<h2>PHP is fun!</h2>";
echo "Hello world!
";
echo "I'm about to learn PHP!
";
echo "This", " string", " was", " made", " with multiple parameters.";
?>
顯示變量
下面的例子展示如何用 echo 命令來顯示字符串和變量:
<?php
$txt1="Learn PHP";
$txt2="W3School.com.cn";
$cars=array("Volvo","BMW","SAAB");
echo $txt1;
echo "
";
echo "Study PHP at $txt2";
echo "My car is a {$cars[0]}";
?>
>幾個(gè)常用的php庫函數(shù)
打印某一個(gè)變量的類型和值:var_dump()
$a = "abc";
var_dump($a); //string(3) "abc"
print_r("abc");
返回一個(gè)變量的所有數(shù)據(jù)
$arr = var_export($array);
獲取某個(gè)變量的類型名稱:gettype()
echo gettype($a); //string
判斷一個(gè)變量是否為某個(gè)類型:is_int is_bool is_string
if(is_string($a)){
echo "\n is string"; //is string
}
強(qiáng)制裝換:set type($var, $type)或($type)$a
(int)$a;
settype($a,int);
* PHP 日期和時(shí)間
* PHP Date() 函數(shù)
```
date(format,timestamp)
* 通過 PHP mktime() 創(chuàng)建日期
```
mktime(hour,minute,second,month,day,year)
通過 PHP strtotime() 用字符串來創(chuàng)建日期
```
strtotime(time,now)
strtotime("10:38pm April 15 2015");
<?php
$d=strtotime("tomorrow");
echo date("Y-m-d h:i:sa", $d) . "<br>";
$d=strtotime("next Saturday");
echo date("Y-m-d h:i:sa", $d) . "<br>";
$d=strtotime("+3 Months");
echo date("Y-m-d h:i:sa", $d) . "<br>";
?>
others:
“memory_get_usage”獲取當(dāng)前PHP消耗的內(nèi)存
error_reporting(0); 禁止顯示PHP警告提示
somethings you can do ...