【原】PHP從入門到精通2小時【圖文並茂】

原創內容,轉載請註明。php

主要內容:html

  1. 搭建PHP開發環境
  2. 第一個helloworld程序
  3. 變量
  4. 全局變量
  5. 循環結構
  6. 函數
  7. 數組
  8. 面向對象編程
  9. 繼承
  10. 接口
  11. 多態
  12. 日誌
  13. 文件的讀寫
  14. 時間格式和時區
  15. 建立圖形
  16. 從遠程獲取圖形
  17. 生成二維碼
  18. php與數據庫mysql的鏈接
  19. mysql數據庫面向對象編程
  20. cookie技術
  21. 查看cookie
  22. session技術
  23. 查看session
  24. 文件上傳

 

PHP(Hypertext Preprocessor)PHP超文本預處理程序,是一種嵌入HTML的腳本語言,運行在服務器。mysql

若是有必定的編程基礎,1小時以內看完so easy!程序員

搭建PHP開發環境

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

第一個helloworld程序

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句話:

  1. 類用來封裝代碼
  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個核心概念:

  1. 封裝
  2. 繼承
  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);
	}
	
	
?>

  

 

 php與數據庫mysql的鏈接

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數據庫面向對象編程

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技術

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);//再一次刷新頁面時纔會生效!!!
?>

  

 

查看cookie

 testcookie.php

<?php
     
    //建立cookie
    $sta=setcookie('testcookiename','testvalue',time()+60*60);
    if($sta){
        echo 'Cookie設置成功!';
    }
?>

  

chrome瀏覽器查看cookie

打開瀏覽器的設置》高級設置》

隱私設置/內容設置》全部cookie和網站數據

》找到你的網站名,以及cookie的名字,點擊打開便可看到保存到cookie的內容。

 

 session技術

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

 

若是銷燬了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的內容學到這裏,就能夠了。

相關文章
相關標籤/搜索