原創內容,轉載請註明。php
主要內容:html
PHP(Hypertext Preprocessor)PHP超文本預處理程序,是一種嵌入HTML的腳本語言,運行在服務器。mysql
若是有必定的編程基礎,1小時以內看完so easy!程序員
PHP開發環境主要3部分:服務器Apache,編程語言PHP,數據庫MySQL。搭建開發環境,直接使用XAMPP集成安裝就能夠。sql
XAMPP=Apache+MySQL+PHP+Perl,X表示的是跨平臺。chrome
官網下載安裝便可:https://www.apachefriends.org/zh_cn/index.html數據庫
( 安裝太簡單了,沒有什麼可說的,不過若是之前安裝過tomcat,apache,MySQL等,xampp的部分功能可能不能使用,解決辦法網上不少,再也不贅言)apache
php能夠使用note++進行編輯。編程
helloworld.php數組
<?php echo "hello world!"; ?>
而後運行XAMPP的控制面板,點擊Apache的start,綠色就是正常運行了。
而後將helloworld.php文件放在路徑:C:\xampp\htdocs
瀏覽器輸入:http://localhost/helloworld.php
ok,咱們的第一個PHP程序就完成了。
ps:之後咱們將php文件放在一個單獨的文件夾basic中,便於管理
變量,存儲數據的容器,在php中,使用$(美圓符號)開頭的就是變量,能夠給變量賦值,或者輸出變量的值。
另外,php語句以;(英文狀態半角的分號)結束。
<?php //$定義變量 $text='this is a text'; //輸出變量 echo $text; ?>
全局變量就是在全部的php文件範圍內均可以使用的變量(變量的概念,存儲數據的容器)
最經常使用的全局變量有$_GLOBAL,$_SERVER,$COOKIE,$_SESSION,__FILE__(注意是2個下劃線),__LINE__
php文件是嵌入到html、的一種語言,運行在服務器端,能夠和html語言混合書寫。
這裏的.(點號)表示拼接字符串,echo能夠輸出字符串。
global.php
<?php echo '當前執行腳本文件名:'.$_SERVER['PHP_SELF'].'<br/>'; echo '當前執行腳本根目錄:'.$_SERVER['DOCUMENT_ROOT'].'<br/>'; //單行註釋 echo '當前執行腳本絕對路徑:'.$_SERVER['SCRIPT_FILENAME'].'<br/>'; //print_r($_SERVER); //返回當前文件名,行號 echo '當前文件名稱:<strong>'.__FILE__.'</strong><br/>'; echo '當前行號:<strong>'.__LINE__.'</strong><br/>'; ?>
打開瀏覽器,輸入:http://localhost/basic/global.php
循環主要就是for循環,和while循環,能夠重複執行某一個動做,直到知足條件
for(初始化計數值; 知足條件就繼續執行 ; 執行後的操做,將計數值+1){ 執行的代碼; }
while( 知足條件就繼續執行){ 執行的代碼; 將計數值+1 ; }
for_while.php
<?php //for循環 for($i=0;$i<10;$i++){ echo 'good! '; } echo '<br/>'; //while循環 $j=0; while($j<5){ echo 'do... '; $j++; } ?>
打開瀏覽器,輸入:http://localhost/basic/for_while.php
這是任何一種語言的重點,包括php
func.php
<?php sum(1,3); //定義求和函數,帶2個參數 function sum($a,$b){ echo "$a+$b=".($a+$b);//雙引號會輸出變量,單引號輸出字符串 echo '<br/>'; echo '$a+$b='.($a+$b); } ?>
?>
打開瀏覽器,輸入:http://localhost/basic/func.php
數組分爲索引數組,關聯數組,使用print_r(數組)來輸出數組內容
var_dump(數組)查看詳細信息
能夠使用foreach(數組 as 鍵 = > 值){ } 來循環輸出數組
array.php
<?php //索引數組 $arr=array('小李','25','男','開發工程師'); print_r($arr); //Array ( [0] => 小李 [1] => 25 [2] => 男 [3] => 開發工程師 ) //關聯數組 $array=array('姓名'=>'小明','年齡'=>'25','性別'=>'男','職業'=>'開發工程師'); print_r($array); //Array ( [姓名] => 小明 [年齡] => 25 [性別] => 男 [職業] => 開發工程師 ) echo '<br/>'; //輸出詳細信息 var_dump($arr); /*array(4) { [0]=> string(6) "小李" [1]=> string(2) "25" [2]=> string(3) "男" [3]=> string(15) "開發工程師" }*/ echo '<br/>'; //循環輸出數組 foreach($array as $k=>$v){ echo "鍵值對:$k --> $v".'<br/>'; } /** 鍵值對:姓名 --> 小明 鍵值對:年齡 --> 25 鍵值對:性別 --> 男 鍵值對:職業 --> 開發工程師 */ ?>
如下內容就是編程技術的分水嶺,面向對象編程
在面向對象編程的思想中,有最重要的2句話:
首先來學習怎麼樣定義一個類:
類名前+class,類中有public的屬性,如$name,$sex,$age,還有public的方法say()
在類中,只要new一個對象,就自動會執行__construct構造方法
一個類被銷燬,或者程序執行完畢,自動執行__destruct()解構方法
類的屬性和方法,經過對象->指針符號調用
$this 表示當前對象。
classMehtod.php
<?php //定義一個類 class ren{ public $name; public $sex; public $age; //成員方法 public function say(){ echo '個人名字是'.$this->name.',性別是'.$this->sex.','.$this->age.'歲了<br/>'; } //構造方法,只要new 就會執行 function __construct($name,$sex,$age){ $this->name=$name; $this->sex=$sex; $this->age=$age; echo '構造對象'.$this->name.'<br/>'; } //解構方法,程序結束,對象銷燬時執行 function __destruct(){ echo '解構對象'.$this->name.'<br/>'; } } //實例化對象 $xiaoli=new ren('小李','男','25'); $xiaoli->say(); /*輸出: 構造對象小李 個人名字是小李,性別是男,25歲了 解構對象小李 */ ?>
面向對象編程思想中,有3個核心概念:
封裝其實就是類,定義類就是將代碼封裝起來了。
其次就是繼承!
繼承的關鍵字:extends
$this 表示當前對象。
一個B類繼承另一個類A,B會自動擁有A的全部的屬性和方法,而不用再書寫一遍(繼承的思想,程序員懶惰的直接體現,要是程序員也有一個有錢的爹能夠繼承財富該多好。。。)
inherit.php
<?php //申明tool類 class tool{ function on(){ echo '<br/>啓動<br/>'; } function run(){ echo '<br/>運行<br/>'; } function off(){ echo '<br/>關閉<br/>'; } } //繼承inherit class fan extends tool{ function app(){ $this->on(); $this->run(); $this->off(); } } //簡化使用 $haierFan=new fan(); $haierFan->app(); ?>
接口是一種更加高級的繼承方法
定義接口的關鍵字:interface
實現(繼承)接口的關鍵字:implements
接口中的全部的方法都是默認public的,並且只要定義,不用實現(在實現類中實現具體方法)
interface.php
<?php //申明接口 interface tool{ function on(); function run(); function off(); } //實現接口 class fan implements tool{ public $name; function on(){ echo '<br/>'.$this->name.'風扇啓動<br/>'; } function run(){ echo '<br/>'.$this->name.'風扇運行<br/>'; } function off(){ echo '<br/>'.$this->name.'風扇關閉<br/>'; } function __construct($name){ $this->name=$name; } } //繼承inherit class haierfan extends fan{ function app(){ $this->on(); $this->run(); $this->off(); } } //實例化 $fan=new fan('美的 '); $fan->on(); $fan->run(); $fan->off(); echo '<br/> ------------分割線------------ <br/>'; //實例化 $haierfan=new haierfan('海爾 '); $haierfan->app(); ?>
做爲面向對象編程的3大思想之一,多態也是一種高級技能
多態通常都是經過接口來實現的
就是調用同一個方法,執行獲得的結果卻不一樣!!!
經過輸入參數的不一樣,執行結果不一樣,這就是多態
polymorphism.php
<?php //申明接口 interface tool{ function on(); function run(); function off(); } //實現接口 class fan implements tool{ public $name; function on(){ echo '<br/>'.$this->name.'風扇啓動<br/>'; } function run(){ echo '<br/>'.$this->name.'風扇運行<br/>'; } function off(){ echo '<br/>'.$this->name.'風扇關閉<br/>'; } function __construct($name){ $this->name=$name; } } //實現接口 class engine implements tool{ public $name; function on(){ echo '<br/>'.$this->name.'發動機啓動<br/>'; } function run(){ echo '<br/>'.$this->name.'發動機運行<br/>'; } function off(){ echo '<br/>'.$this->name.'發動機關閉<br/>'; } function __construct($name){ $this->name=$name; } } //狀態類 class toolStatus{ function ts($tool){ $tool->on(); $tool->run(); $tool->off(); } } //應用多態polymorphism $fan=new fan('海爾 '); $engine=new engine('奧迪 '); $toolStatus=new toolStatus(); $toolStatus->ts($fan); $toolStatus->ts($engine); ?>
這又是一條牛逼的分割線,php基本功能就是以上的內容,下面是一些更加高階玩法。
log.php
<?php /* 一、設置php.ini文件 二、日誌分類 三、查看日誌 */ //生成運行日誌 error_log("FORM ".__FILE__." ERROR LINE:".__LINE__); /*須要設置正確的日誌路徑,確保路徑存在 [15-Sep-2018 09:31:45 Europe/Berlin] 這是來自C:/xampp/htdocs/basic/log.php 的一段自定義的報錯日誌信息 */ //生成系統日誌 openlog('PHP7',LOG_PID,LOG_USER); syslog(LOG_WARNING,'向syslog發送自定義信息'); closelog(); try{ $a=10; if(isset($b)){ echo "程序正常執行"; }else{ throw new Exception(); } }catch(Exception $e){ ERROR_LOG("錯誤代碼所在路徑:".$e->getFile()); ERROR_LOG( "錯誤代碼所在行號:".$e->getLine()); } echo "<br/>程序執行完畢<br/>"; /* [15-Sep-2018 09:44:41 Europe/Berlin] 錯誤代碼所在路徑:C:\xampp\htdocs\basic\log.php [15-Sep-2018 09:44:41 Europe/Berlin] 錯誤代碼所在行號:26 */ //輸出日誌 依賴於文件的讀寫操做,後續將會學習 ?>
顯示亂碼主要是編碼字符集的問題,將log.php文件保存爲ANSI格式便可看到中文正常顯示,解決方法網上不少。
fileIO.php
<?php //讀取文件 //readfile('./test.txt'); //訪問遠程文件,須要設置php.ini的 allow_fopen=On $html=file_get_contents('http://www.baidu.com'); //輸出html頁面 //echo $html; //設置時區 //能夠在文件開頭位置設置默認配置的時區,也能夠在php.ini中進行設置 ini_set('date.timezone','Asia/Shanghai'); //date_default_timezone_set('asia/shanghai'); //向文件中寫入內容 /* 一、打開文件 二、寫入數據 三、關閉文件 */ //$file=fopen('./test.txt','a+');//追加模式 //$file=fopen('./test.txt','r+');//半覆蓋(數據多少覆蓋多少) $file=fopen('./test.txt','w+');//全覆蓋 if($file){ fwrite($file,'寫數據123!\r\n換行了嗎?\r\n');//單引號不會換行 fwrite($file,"寫數據123!\r\n換行了嗎?\r\n");//雙引號換行 echo date("Y-m-d H:i:s").'寫入數據成功'.date("Ymd His"); fclose($file); } ?>
time.php
<?php //設置時區 echo '<br/>默認時區時間:'.date("Y-m-d H:i:s").'<br/>'; //能夠在文件開頭位置設置默認配置的時區 //也能夠在php.ini中進行設置date.timezone(全部文件生效) ini_set('date.timezone','Asia/Shanghai'); echo '<br/>上海時區時間:'.date("Y-m-d H:i:s").'<br/>'; //或者直接設置時間格式 date_default_timezone_set('asia/tokyo'); echo '<br/>東京時區時間:'.date("Y-m-d H:i:s").'<br/>'; echo '<br/>格式化時間:'.date("YmdHis").'<br/>'; /* 默認時區時間:2018-09-15 10:44:03 上海時區時間:2018-09-15 16:44:03 東京時區時間:2018-09-15 17:44:03 格式化時間:20180915174403 */ ?>
image.php
<?php //建立畫布 $img=imagecreate(500,500); //設置顏色 //背景色 $white=imagecolorallocate($img,255,255,255); //畫筆 $black=imagecolorallocate($img,0,0,0); //矩形 imagerectangle($img,100,100,300,300,$black); //輸出圖像前清理輸出緩衝 ob_clean(); //解決chrome兼容性問題 header("Content-type:image/jpeg"); //輸出圖像到瀏覽器 imagejpeg($img) or die("建立圖像失敗<br/>"); //釋放資源 imagedestroy($img); ?>
imageUrl.php
<?php $img=imagecreatefromjpeg('https://b-ssl.duitang.com/uploads/item/201607/04/20160704052649_WLyfB.jpeg'); ob_clean(); header('Content-type:image/jpeg'); imagejpeg($img) or die('建立圖形失敗'); imagedestroy($img); ?>
vcode.php
<?php vcode(150,100); //生成驗證碼 function vcode($width,$high){ //建立畫布 $img=imagecreate($width,$high); //設置背景色 黑色 $black=imagecolorallocate($img,0,0,0); //設置畫筆 白色 $white=imagecolorallocate($img,255,255,255); //產生隨機干擾線條 for($i=0;$i<$width/20;$i++){ imageline($img,rand(0,$width),rand(0,$high),rand(0,$width),rand(0,$high),$white); } //產生隨機干擾點 for($i=0;$i<$width;$i++){ imagesetpixel($img,rand(0,$width),rand(0,$high),$white); } //產生4個隨機字母,數字 $data=''; for($i=0;$i<4;$i++){ switch(rand(1,3)){ case '1':$ch=rand(0,9);break; case '2':$ch=sprintf('%c',rand(65,90));break; case '3':$ch=sprintf('%c',rand(97,122));break; } $data=$data.$ch; } //繪製truetype文字 imagettftext($img,$high/3,rand(1,15),$width*0.1,$high*0.7,$white,'C:/Windows/Fonts/Arial.ttf',$data); //清理緩存 ob_clean(); //解決chrome兼容性問題 header('Content-type:image/jpeg'); //輸出到瀏覽器 imagejpeg($img) or die('建立畫布失敗'); imagedestroy($img); } ?>
mysql.php
<?php //鏈接數據庫 $host='localhost'; $username='root'; $password=''; $database='my_db'; $conn=mysqli_connect($host,$username,$password,$database) or die('數據庫鏈接失敗!'); //echo '數據庫鏈接成功!'; //操做數據庫 $sql='select * from cartoon'; $result=mysqli_query($conn,$sql); //讀取返回信息 while($obj=mysqli_fetch_assoc($result)){ echo $obj['name'].'如今'.$obj['age'].'歲了。<br/>'; } //關閉數據庫鏈接 mysqli_close($conn); ?>
mysql_obj.php
<?php // 建立鏈接 $conn = new mysqli('localhost', 'root', '','my_db')or die("鏈接失敗: " . $conn->connect_error); if($conn){ echo "數據庫鏈接<br/>"; } //操做數據庫 $sql = "SELECT * FROM cartoon;"; $result=$conn->query($sql); while($row=$result->fetch_assoc()){ echo "name:".$row['name']."-country:".$row['country']."<br/>"; } /* name:校長-country:中國 name:西門慶-country:中國 name:武大郎-country:中國 name:武松-country:中國 */ //關閉鏈接 //$conn->close(); //$conn2=new mysqli('localhost','root','','my_db') or die('鏈接失敗:'.$conn2->connect_error); $sql2="SELECT * FROM cartoon;";//sql語句必定要用雙引號!!! $result2=$conn->query($sql2); //print_r($conn2->query($sql2)); while($row2=$result2->fetch_assoc()){ echo 'name:'.$row2['name'].',sex:'.$row2['sex'].'<br/>'; } $conn->close(); echo "數據庫關閉<br/>"; ?>
cookie.php
cookie能夠用於頁面之間傳值,沒有設置有效時間,那麼默認爲瀏覽器關閉失效
這就是會話cookie,保存在內存中
(關閉頁面不會失效,關閉瀏覽器纔會失效)
cookie.php
<?php //訪問時間 echo '訪問時間<br/>'; if(isset($_COOKIE['visittime'])){ echo '您上一次訪問本網站是在:'.$_COOKIE['visittime'].'<br/>'; echo '本次訪問時間是:'.date('Y-m-d H:i:s').'<br/>'; setcookie('visittime',date('Y-m-d H:i:s')); }else{ setcookie('visittime',date('Y-m-d H:i:s')); echo '這是您第一次訪問本網站<br/>'; } //訪問次數 echo '訪問次數<br/>'; if(isset($_COOKIE['num'])){ setcookie('num',$_COOKIE['num']+1); echo '這是您第'.$_COOKIE['num'].'次訪問本網站<br/>'; }else{ setcookie('num',1+1); echo '歡迎您首次訪問本網站<br/>'; } /* 訪問時間 您上一次訪問本網站是在:2018-09-16 05:09:22 本次訪問時間是:2018-09-16 05:09:32 訪問次數 這是您第2次訪問本網站 */ //刪除cookie,有效時候爲過去時間便可,time()-1 setcookie('num',1,time()-1); echo '$_COOKIE[num]已被註銷<br/>'; print_r($_COOKIE);//再一次刷新頁面時纔會生效!!! ?>
testcookie.php
<?php //建立cookie $sta=setcookie('testcookiename','testvalue',time()+60*60); if($sta){ echo 'Cookie設置成功!'; } ?>
打開瀏覽器的設置》高級設置》
隱私設置/內容設置》全部cookie和網站數據
》找到你的網站名,以及cookie的名字,點擊打開便可看到保存到cookie的內容。
session存儲在服務器,更安全,沒有長度限制
而cookie存儲在客戶機,客戶能夠禁用cookie
session能夠用於跨頁面請求,有一個隨機生成的惟一的session_id
典型的應用就是購物車
session.php
<?php /* session技術 session存儲在服務器,更安全,沒有長度限制 而cookie存儲在客戶機,客戶能夠禁用cookie session能夠用於跨頁面請求,有一個隨機生成的惟一的session_id 典型的應用就是購物車 */ //準備工做,設置php.ini的session.save_path="C:\xampp\tmp" //啓動會話 session_start(); //設置session $_SESSION['name']='Peter'; $_SESSION['password']='12345'; echo 'Session 建立成功!<br/>'; /*打開服務器的session文件查看 name|s:5:"Peter";password|s:5:"12345"; */ print_r($_SESSION); //清空session,session文件只是清空 $_SESSION=array(); echo '<br/>註銷當前回話session<br/>'; print_r($_SESSION); //銷燬session文件,session文件會被刪掉 session_destroy(); echo '<br/>session已經完全銷燬<br/>'; print_r($_SESSION); ?>
若是銷燬了session
file_upload.php
<html> <form method='post' enctype='multipart/form-data'> <input type='file' name='upfile' /> <input type='submit' value='上傳' /> </form> </html> <?php if(!empty($_FILES)){ print_r($_FILES); $tmpname=$_FILES['upfile']['tmp_name'];//文件臨時名 $name=$_FILES['upfile']['name'];//文件原名 //文件會上傳到與該頁面文件同一個目錄 move_uploaded_file($tmpname,$name) or die('文件上傳失敗,程序退出!'); echo '<br/>文件上傳成功!<br/>'; }else{ echo '<br/>沒有上傳文件<br/>'; } ?>
ok,基本上php的內容學到這裏,就能夠了。