我想問本身,爲何要學習PHP
,什麼是PHP
,學習以後,我能作什麼,將來的發展,那麼如何學習一門編程語言,如何給出學習建議。javascript
php
是一種超文本預處理器的學習語言,它是一種被普遍應用的開放源代碼的多用途的腳本語言,它可嵌入到HTML
中,尤爲是適合web
開發。php
PHP
是一種在服務器端執行的嵌入HTML
文檔的腳本語言。語言的風格相似於C
語言,如今被不少的網站編程人員普遍的運用。使用PHP
能夠開發各類交互式的動態網頁。css
那麼如何理解動態網頁呢?接下來講一說:html
動態網站和靜態網站的區別?
還有如LAMP
這些詞表明什麼意思呢?在PHP中經常使用到的:前端
LAMP是什麼呢,須要瞭解一下?
L:LINUX
A:Apache
M:mysql
P:PHP
擴展性說說以下詞彙,須要咱們逐步去了解。java
LAMP
: Linux+Apache+MySQL+PHP
mysql
LNMP
: Linux+Nginx+MySQL+PHP
jquery
LNMPA
: Linux+Nginx+MySQL+PHP+Apache
git
WAMP
: Window+Apache+MySQL+PHP
github
集成環境: wampserver, xampp, phpstudy
Apache
是世界上使用排名前列的web
服務器軟件,它能夠運行在幾乎全部普遍使用的計算機平臺上,因爲其跨平臺和安全性被普遍使用,是最流行的web
服務器端軟件之一。它快速,可靠而且可經過簡單的api
擴充。
那麼讓咱們走進PHP
世界,瞭解其語法結構吧!
PHP
文檔結構:1.文檔擴展名.php
; 2.注意,文件名不要使用中文,也不要包含特殊字符
PHP
標記風格:
下面看看代碼示例:
<?php 代碼段;?>
下面看看代碼示例:
<?代碼段;?>
注意:須要配置PHP
配置文件php.ini
中short_open_tag=On
,重啓Apache
服務器便可
ASP
風格:下面看看代碼示例:
<% 代碼段; %>
注意:須要配置PHP
配置文件php.ini
中asp_tags=On
,重啓Apache
服務器便可
PHP
語法風格示例:
<?php echo 'this is dada show dada'; <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>55555--<?php echo 'hello world';?></title> <style media="screen"> h1{ color:<?php echo '5555';?>; } </style> <script type="text/javascript"> alert('hello world'); </script> </head> <body> <h1>this is dadada show time<?php echo 'dada';?></h1> </body> </html> <?php // 標準風格的寫法 // echo 輸出一個或者多個字符串 /* echo 'this is a dada'; echo '<br/>'; echo 'hello world'; */ echo 'this is dada show time';
學習php
須要工具,這裏能夠說說常使用的phpstorm
phpstorm
的安裝和使用phpstorm
是JetBrains
公司開發的一款商業的PHP
集成開發工具,能夠隨時幫助用戶對其進行編碼,運行單元測試或者提供可視化debug
功能。
進入phpstorm
官網,點擊「downLoad」
按鈕,進入下載頁面。
最後,雙擊桌面圖標便可。
php
文件命名注意事項:
變量的注意事項:
數據類型:
特殊符號:
單引號和雙引號的區別
\
和\\
這兩個轉義符花括號的意義
${變量名}變量名
;{$變量名變量名}
;經過函數形式實現臨時轉換
intval(變量)
轉成整型strval(變量)
轉成字符串型boolval(變量)
轉成布爾類型永久轉換
settype
(變量,設置的類型)設置變量類型gettype
(變量)獲得變量的類型變量函數庫檢測變量類型
is_int
(變量) > 檢測整型is_string
(變量) > 檢測字符串類型is_array
(變量) > 檢測數組類型is_resource
(變量) > 檢測資源類型is_object
(變量) > 檢測對象類型is_null
(變量) > 檢測null類型is_numeric
(變量) > 檢測數值型系統常量
PHP_VERSION
:獲得php
版本PHP_OS
:獲得服務器的操做系統M_PI
:PI
的值$
符號檢測常量是否被定義
defined
函數var_dump
(defined
變量)魔術常量
__LIEN__
獲得行號__FILE__
獲得文件的完整路徑和文件名__FUNCTION__
函數名稱__CLASS__
類__METHOD__
方法__DIR__
返回文件所在路徑以點的形式來鏈接咱們的變量
讓咱們來看看下面示例代碼:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <script src="jquery-2.2.3.js" type="text/javascript"></script> </head> <body> <?php header("content-type:text/html;charset=utf-8"); $str = ''; $rand = mt_rand(1000, 9999); $str.='<span style="color:rgb('.mt_rand(0, 255).', '.mt_rand(0, 255).','.mt_rand(0, 255).') ">'.mt_rand(0, 9).'<span>'; $str.='<span style="color:rgb('.mt_rand(0, 255).', '.mt_rand(0, 255).','.mt_rand(0, 255).') ">'.mt_rand(0, 9).'<span>'; $str.='<span style="color:rgb('.mt_rand(0, 255).', '.mt_rand(0, 255).','.mt_rand(0, 255).') ">'.mt_rand(0, 9).'<span>'; $str.='<span style="color:rgb('.mt_rand(0, 255).', '.mt_rand(0, 255).','.mt_rand(0, 255).') ">'.mt_rand(0, 9).'<span>'; ?> <label for="check">請輸入驗證碼:</label> <div id="hiddent_val" style="display: none;"><?php echo $str ?></div> <input type="text" name="check" id="check_val"/><?php echo $str; ?> <br/> <input type="button" onclick="javascript:check();" value="提交"/> <script> function check(){ var v1=$("#hiddent_val").text(); v1 = v1*1; var v2=$("#check_val").val(); v2 = v2*1; if(v1==v2){ alert('true'); }else{ alert('false'); } } </script> </body> </html>
日期函數格式代碼:
data($format[,$time=time()]) time(): Y:年,m:月, d:日, h:小時, i:分鐘, s:秒 w:星期一到星期天 0表示星期天 設置時區:函數形式 date_default_timezone_get() date_default_timezone_set($timezone);
預約義變量:系統內已定義的變量,以下有:
$_POST:http
-post
變量,接收表單以post
方式發送的數據$_GET:HTTP
-get
變量,接收以?
形式傳參的數據$_FILES:HTTP
文件上傳變量$_SERVER
:服務器和執行環境變量$_ENV
:環境變量$_SESSION
:會話變量$_COOKIE
:HTTP Cookies$_REQUEST:$_GET+$_POST+$COOKIE
$php_errormsg
前一個錯誤信息$GLOBALS
超全局變量,在所有做用域中始終可用的內置變量讓咱們看看Switch...case
的示例代碼以下:
<?php $a = 2; switch ($a){ case 1: echo 'a<br/>'; break; case 2: echo 'b<br/>'; break; case 3: echo 'c<br/>'; break; default: echo '默認的執行'; }
讓咱們看看for
的示例代碼以下:
<?php //1到100的數進行相加 5050, //1+2+3+4 $sum =0; for($i=0;$i<101;$i++){ $sum = $sum+$i; } echo $sum; echo '<hr/>'; //1到100可以被2整除的數, for($i=1;$i<101;$i++){ if($i%2==0){ echo '這是可以被2整除的數:'.$i.'<br/>'; } }
學習小案例以下-乘法表代碼:
<?php /* 1*1=1; * 1*2=2 2*2=4 * */ for($i=1;$i<=9;$i++){ for($j=1;$j<=$i;$j++){ echo $j.'*'.$i.'='.($i*$j)."\t"; } echo '<br/>'; }
特殊流程控制-示例:
<?php //break跳出整個for循環 for($i=1;$i<10;$i++){ if($i==3){ break; } echo '這裏是$i的值:'.$i.'<br/>'; } echo '<hr/>'; //continue跳出當前循環 for($i=1;$i<10;$i++){ if($i==3){ continue; } echo '這裏是$i的值:'.$i.'<br/>'; } echo '<hr/>'; echo '這裏是開始部分'; goto jump; echo '這裏是jump下面的代碼'; jump: echo '這裏是jump裏面的代碼'; echo '<hr/>'; echo '這裏是結束部分';
什麼是PHP數組呢?數組是什麼呢?- 數組:數據的集合,在php
中數組其實是一個有序映射。
經過array()
形式聲明:
array()
空數組array(值1,值2...)
下標連續的索引數組,數組的下標從0開始array(key=>value,key=>value...)
能夠聲明索引數組和關聯經過:print_r
打印數組
數組或者混合數組:
true
轉換爲1,false
轉換爲0null
轉換爲空字符串動態建立數組:
$
數組名稱[]
:下標連續的索引數組$
數組名稱[數字]
:指定數組索引$
數組名稱[字符串]
:關聯數組快速建立數組-示例格式:
range($min, $max[$step=1]); 快速建立索引數組 compact($varname,...);快速建立關聯數組
學習小示例:
<?php // $arr = array(); // var_dump($arr); //索引數組 下標是從數字開始的 $arr = array( 1, 5.5, false, 'dada' ); print_r($arr); echo '<hr/>'; //array(key=>value,key=>value...) $arr1 = array( 5=>'dada', 6=>12, 9=>false, 4=>4.4 ); print_r($arr1); echo '<hr/>'; //關聯數組,下標是字符串 //username 能夠稱呼爲咱們的鍵名, //咱們的鍵名所對應的值就是鍵值 $arr2 = array( 'username'=>'dada', 'password'=>123456, 'age'=>27 ); print_r($arr2); echo '<hr/>'; //索引+關聯混合使用 $arr3 = array( 1,2,3,4,5, 'username'=>'dadaqianduan', 'addr'=>'haha' ); print_r($arr3); echo '<hr/>'; $arr3['username'] = 'dada'; print_r($arr3);
current($arr)
,獲得數組當前指針所在位置元素的鍵值key($arr)
,獲得數組當前指針所在位置元素的鍵名next($arr)
,將數組指針向下移動一位,而且獲得數組指針所在位置元素的鍵值prev($arr)
,將數組指針向上移動一位,而且返回當前指針所在位置元素的鍵值end($arr)
,將數組指針移動到數組的末尾,而且返回當前元素的鍵值reset($arr)
,將數組指針移動到數組的開始,而且返回當前元素的鍵值經過foreach遍歷數組
foreach(數組名稱 as $key=>$val){}
經過list和each遍歷數組
list($var[,$var...])
:把數組中的值賦給一些變量each($arr)
返回數組中當前的鍵/值對並將數組指針向前下移動一位如何建立用戶列表頁面,示例代碼格式以下:
<tr style="text-align:center;"> </tr> <?php foreach($userInfo as $val){ ?> <tr style="text-align:center;"> <td><?php echo $val['id'];?></td> <td><img src="img/<?php echo $val['id'];?>" alt=""/></td> </tr> <?php }?>
如何添加留言頁面,示例代碼格式以下:
<body> <h2>添加留言頁面</h2> <form action="doAction.php?act=add" method="get"> <table border="1" width="80%" cellpadding="0" cellspacing="0" bgcolor="blue"> <tr> <td>留言者</td> <td><input type="text" name="username" id="" placholder="請輸入您的呢稱"/></td> </tr> </table> </form> </body>
提交反映-doAction.php
<?php $username = $_GET['username']; $title = $_GET['title']; $content = $_GET['content']; $arr[] = array( 'username' => $username, 'title' => $title, 'content' => $content ); print_r($arr);
收集留言信息:
$filename = 'text.txt'; $data = 1; file_put_contents($filename, $data);
<input type="hidden" name="act" value="add"/> ?php $username = isset($_GET['username']) ? $_GET['username'] : ''; $time = date('Y-m-d h:i:s'); $act = isset($_GET['act']) ? $_GET['act']:''; // 是不是添加頁面 // 判斷 if(file_exists($filename) && filesize($filename)>0){ $str = file_get_contents($filename); $arr = unserialize($str); } if($act == 'add'){ ... $arr = serialize($arr); file_put_contents($filename, $arr); }
if($act == 'add') { $arr[] = array( 'username' => $username, 'title' => $title, 'content' => $content, 'time' => $time ); $arr = serialize($arr); if(file_put_contents($filename, $arr)){ echo'添加留言成功'; }else{ echo '添加留言失敗'; }; }
總結9點經常使用函數,下面來看看它們各有什麼含義以及做用:
strlen($string)
獲得字符串長度strpos($string,$search[,$offset])
:在指定字符串中查找目標字符串第一次出現的位置stripos($string,$search[,$offset])
:忽略大小寫的去查找strrpos($string,$search[,$offset])
:在指定字符串中查找目標字符串最後一次出現的位置strripos($string,$search[,$offset])
:忽略大小寫的去查找最後一次出現的位置strstr|strchr($string,$search[,$before_needle])
:查找字符串的首次出現,返回的是字符串strrchr($string,$search)
:查找指定字符在字符串中的最後一次出現stristr($string,$search[,$before_needle])
:忽略大小寫的去查找str_replace($search,$replace,$string)
:在指定字符串中去查找另一個字符串,找到以後將其替換成指定字符串str_ireplace($search,$replace,$string)
:忽略大小寫的去查找並替換strtolower($string)
:返回小寫以後的字符串strtoupper($string)
: 返回大寫以後的字符串ucwords($string)
:單詞的首字母大寫ucfirst($string)
:字符串的單詞的首字母大寫lcfirst($string)
:字符串的單詞的首字母小寫ord($char)
:獲得指定字符的ASCIIchr($ascii)
:根據ASCII獲得指定的字符substr($string,$start[,$length])
:截取字符串substr_replace($string,$replace,$start[,$length]):
替換字符串的子串md5($string)
: 計算字符串的md5的散列值,返回32
位長度的字符串sha1($string)
: 計算字符串的sha1的散列值,返回40
位長度的字符串trim($string[,$charlist])
:默認過濾字符串兩端的空格,也能夠過濾指定字符串ltrim($string[,$charlist])
:過濾字符串左端rtrim | chop($string[,$charlist])
:過濾字符串右端strip_tags($string[,$allowTag])
:過濾字符串中的html標記addslashes($string)
:使用反斜線引用字符串中的特殊字符htmlentities($string[,$flag=ENT_COMPAT])
:將全部字符轉換成HTML實體htmlspecialchars($string[,$flag=ENT_COMPAT]
:將字符串中的特殊字符轉換成HTML實體nl2br($string)
:將字符串中的\n
用<br/>
替換explode($delimiter,$string)
將指定字符串拆分紅數組implode | join($delimiter,$array)
以指定分隔符將數組中的鍵值鏈接成字符串str_split($string[,$split_length=1])
將字符串轉換成數組strrev($string)
反轉字符串str_shuffle($string)
隨機打亂字符串str_repeat($string)
重複字符串str_getcsv(...)
解析csv字符串爲一個數組parse_str($str[,$arr])
將字符串解析成多個變量接下來以表格的形式展現以下內容
數學函數庫表格以下:
函數 | 說明 |
---|---|
abs($number) |
求絕對值 |
ceil($number) |
進一取整 |
floor($number) |
舍掉小數部分 |
round($number,$percision) |
四捨五入 |
pow($base,$exp) |
冪運算 |
sqrt($number) |
平方根 |
max($val1,$val2,..) |
求最大值 |
min($val1,$val2...) |
求最小值 |
mt_rand($min,$max) |
產生隨機數 |
日期時間函數庫表格以下:
函數 | 說明 |
---|---|
date_default_timezone_get() |
獲得默認時區 |
date_default_timezone_set($timezone) |
設置默認時區 |
date($format[,$time]) |
獲得服務器的日期時間 |
time() |
獲得當前的時間戳 |
mktime() |
取得一個日期的unix時間戳 |
getdate($timestamp) |
取得日期時間信息 |
gettimeofday($return_float) |
取得當前時間 |
microtime([$get_as_float]) |
返回當前unix時間戳和微妙數 |
strtotime($time[,$now=time()]) |
將任何英文文本的日期時間描述解析爲unix 時間戳 |
建立數組操做
函數 | 描述 |
---|---|
range($min, $max[,$step=1]) |
快速建立下標連續的索引數組 |
compact($varname,$varname...) |
快速建立關聯數組 |
array_fill($start_index,$num,$value) |
用給定的值填充數組 |
array_fill_keys($keys,$value) |
使用指定的鍵和值填充數組 |
array_combine($keys,$values) |
建立一個數組,用一個數組的值做爲其鍵名,另一個值做爲其鍵值 |
鍵值相關操做表格以下:
函數 | 描述 |
---|---|
count() |
計算數組中的單元數目或對象中的屬性個數 |
array_keys($array) |
取得數組的鍵名做爲下標連續的索引數組返回 |
array_values($array) |
取得數組的鍵值做爲下標連續的索引數組返回 |
array_filp($array) |
交換數組中的鍵名和賦值 |
in_array() |
檢測數組中是否存在某個值 |
array_search() |
在數組中搜索給定的值,若是成功則返回相應的鍵名 |
arry_key_exists() |
檢查給定的鍵名或索引是否存在於數組中 |
array_reverse() |
數組倒置 |
shuffle() |
打亂數組的元素 |
array_rand() |
隨機取出數組的鍵名 |
array_unique() |
移除數組中重複的值 |
array_sum() |
統計數組中元素值的總和 |
數組指針函數表格以下:
函數 | 描述 |
---|---|
key($array) |
獲得當前指針所在位置元素的鍵名 |
current($array) pos($array) |
獲得當前指針所在位置元素的鍵值 |
next($array) |
將數組指針向下移動一位,而且返回當前指針所在位置元素的鍵值 |
prev($array) |
將數組指針向上移動一位,而且返回當前指針所在位置元素的鍵值 |
end($array) |
將數組指針移動到數組的末尾,而且返回當前指針所在位置元素的鍵值 |
reset($array) |
將數組指針移動到數組的開始,而且返回當前指針所在位置元素的鍵值 |
each($array) |
返回數組中當前的鍵值對,並將數組指針向下移動一位 |
list($var,...) |
將數組中元素的值賦給對應的變量 |
array_unshift($array,$value...) |
在數組開頭插入一個元素或者多個元素 |
array_shift($array) |
彈出數組的第一個元素 |
array_push($array,$value...) |
在數組末尾壓入一個元素或者多個元素 |
array_pop($array) |
彈出數組的最後一個元素 |
數組的拆分與合併表格以下:
函數 | 描述 |
---|---|
array_slice($array,$offset) |
截取數組 |
array_merge() |
合併數組 |
如何聲明函數呢?來看看以下代碼:
function 函數名稱([參數...]){ 函數體; return 返回值; }
注意事項:
接下來咱們看看帶入的函數參數:
參數分爲形參和實參:
形參,定義函數時聲明的參數(必選參數:調用函數的時候必選要傳參;可選參數:調用函數的時候若是不傳參數,使用默認值;)
實參,調用函數時實際傳入的參數
接下來了解變量的做用域,以下思惟導圖:
接下來講說函數的傳值和傳引用區別:
回調函數是什麼呢?
在開發過程當中,有時候但願針對一個對象或者一個值執行多個不相干的操做,那麼運用回調將是最好的方式。
<?php function text1(){ echo '我是達達'; } function text2($username){ echo '我是哪吒'; } // 回調函數:函數體內的名稱是咱們要傳入的參數(); function callBack($call,$str){ $call($str); } // 回調函數的使用就是傳入的參數是你想要回調的函數名稱 callBack('text2','dadaqianduan');
什麼是遞歸函數,即函數體本身調用本身自己
寫法示例:
function text($i) { echo $i; $i--; if($i>=0){ text($i); } } text(2);
匿名函數示例:
$str = function() { echo 'dadaqianduan'; }; $str(); $str1 = function($username) { echo 'dada'; echo $username; }; $str1('哪吒');
php的文件包含:include
,include_once
,require
,require_once
,就是將一個文件的內容包含進另一個文件。
require
引用文件出錯的時候 是一個報錯一個警告include
引用文件出錯的時候 是兩個警告require
會生成致命錯誤並中止腳本include
只會生成警告,而且腳本會繼續因此這裏建議你使用include
哦!
include
或require
語句會獲取指定文件中存在的全部文本,代碼,標記,並複製到使用include
語句文件中。
語法格式以下:
include 'filename'; 或 require 'filename';
php include示例:
讓咱們來建立要給名爲'dada.php'的標準的頁腳文件,代碼以下:
<?php echo '<p> 達達 哪吒</p>'; ?>
而後須要在另外一個頁面中引用這個頁腳文件以下:
<html> <body> <p>魔王哪吒</p> <?php include 'footer.php'; ?> </body> </html>
require_once/include_once
,與require/include
做用相同,不一樣在於執行到時會先檢查目標內容是否是在以前已經導入過,若是導入過了,那麼便不會再次重複引入其一樣的內容。
首先了解面向對象是什麼呢?
它是一種思想,是一種開發方式,並非實際的代碼。
談到面向對象,就要說到面向對象與面向過程的區別:
面向的幾種方式:
OOA(Object Oriented Analysis)面向對象分析 OOD(Object Oriented Design)面向對象設計 OOP(Object Oriented Programming)面向對象編程
說到面向對象就離不開類和對象的關係:類是具體事務的抽象,對象是這個類的具體實例。
怎麼樣定義一個類,類的定義:(相似class關鍵字來定義的)
class Person{ } <?php // 定義一我的類 class Person{ // 類裏面是有屬性和方法存在的 // public 訪問修飾符 public $userName = 'dada'; public $age = 12; } // 經過new 關鍵字來建立咱們的對象 $p = new Person(); echo $p->userName.'<hr/>'; echo $p->age.'<hr/>';
屬性講了,說說方法吧,以下示例:
<?php class Person{ public $userName; public $age; // 類裏面的行爲稱爲方法 public function eat() { echo '我要吃飯'; } } $p = new Person(); $p->eat();
來講一下對象的內存分析,在PHP中,內存被劃分爲四個:
訪問修飾符有哪些呢?以下展現:
public
公共的,默認protected
受保護的private
私有的代碼示例以下
<?php class Da{ public $userName = 'dada'; protected $age = 12; public function eat() { echo '我要吃飯'; } } $da = new Da(); echo $da->userName echo $da->age // 報錯
修改以下:
<?php class Da{ public $userName = 'dada'; protected $age = 12; public function eat() { echo '我要吃飯'; //$this echo $this->age; } } $da = new Da(); echo $da->userName echo $da->eat()
首先什麼是構造函數呢?構造函數是經過new
對象的時候會被調用的。
其次析構函數是什麼?析構函數首先不能帶有參數,析構函數會在對象的全部引用被刪除或者顯示的消失以前被調用。
<?php class Person { public $userName; public $age; // php5.5以前的寫法 // public function Person() { // echo '我是構造函數'; // } // 經過一個魔術常量來寫構造函數 public function _construct($userName,$age) { // $this表示的是當前對象 $this->userName = $userName; $this->age = $age; } // 析構函數 public function _destruct(){ echo '析構函數' } } $p1 = new Person('dada',12); echo $p1->userName $p1 = null; // 析構函數被調用
瞭解set和get
方法:set
對外界提供設置成員屬性的方法,而get
對外界提供訪問成員屬性的方法。
因此魔術常量:_set
和_get
。
以下示例:
<?php class Person{ private $userName; private $age; public function setAge($age){ // $this->age = 12; // $this-age == private $age; $this->age = $age; } public function getAge(){ return $this->age; } public function _set($key,$value){ $this->userName = $value; } public function _get($key){ return $this->userName; } $p = new Person(); // echo $p->userName; $p->setAge(16); echo $p->getAge();
_isset
當外部調用isset()
函數檢測不可訪問的屬性或者不存在的屬性時自動調用。_unset
當在類外部調用unset
銷燬不可訪問屬性時自動調用。以下示例表示:
<?php class Person{ private $userName; private $age; public $abc; public function _construct($userName,$age){ $this->userName=$userName; $this->age=$age; } public function _isset($name){ echo '當外部調用isset()函數檢測不可訪問的屬性或者不存在的屬性時自動調用'; return isset($name); // boolean } public function _unset($name){ echo '當在類外部調用unset銷燬不可訪問屬性時調用'; } } $p = new Person('dada',12); var_dump(isset($p->userName)); // echo '<hr/>' unset($p->abc);
下面來講說面向對象的繼承,封裝,多態中的繼承特色:
那麼繼承的意義在於哪裏,用繼承能夠減小重複代碼,經過extends
關鍵字來繼承。
代碼示例以下:
<?php class Person{ public $userName; public $age; public function eat(){ echo 'dadaqianduan'; } } class Student extends Person{ } $stu = new Student(); echo $stu->eat();
parent
關鍵字繼承中使用parent
,代碼以下:
<?php class Person { public $userName='parent'; public $age = 100; protected function eat() { echo `老爸要吃飯`; } } class Student extends Person { public $userName = 'children`; public $age = 12; // 重寫 須要訪問的修飾符必須和父類的平級或者大於父類,方法名字相同 public function eat() { parent::eat().'<hr/>'; echo 'children'; } } $stu = new Student(); echo $stu->eat();
使用final關鍵字注意事項:
final
關鍵字不能修飾屬性final
修飾過的class
和方法不能被繼承或者重寫static
用於表示靜態的意思:
static
所修飾的屬性和方法都是靜態的屬性和方法下面代碼示例以下:
class Person { public static $i = 1; public static function eat(){ echo '要吃飯'; } } echo Person::$i; Person::eat();
self
在類內部經過self
來訪問靜態的屬性和方法:
下面代碼示例以下:
class Student { public static $i = 1; public static function eat(){ echo self::$i; } } Student::eat();
下面示例靜態綁定的用法以下:
<?php class A{ public static function text1(){ echo 'text1'; } public static function text2(){ echo 'text2'; self::text1(); } } class B extends A { public static function text1(){ echo 'B-A'; } } B::text2();
const,爲常量修飾符,常量的特色,不能被修改,惟一的標識符,注意以下:常量要大寫,不能經過對象來訪問,不須要加$
符號。
示例鏈接數據庫:
<?php header("content-type:text/html;charset=urf-8"); // 創建鏈接而且返回鏈接對象 $link = mysqli_connect('localhost','root','root') or die('鏈接失敗'); // 設置字符集 mysqli_set_charset($link,'utf8'); // 打開指定數據庫 mysqli_select_db($link, 'dadaqianduan'); // 執行sql語句 $query = "insert user values(1,'dada','12345')「; $res = mysqli_query($link, $query); if($res){ echo '插入數據成功'; }else{ echo '插入數據失敗'; }
因此mysqli
操做數據庫的步驟有:
mysql
sql
查詢若是每次使用都要重寫鏈接數據庫,那麼咱們能夠進行封裝:
封裝數組:config.php
<?php $config = array( 'host'=>'localhost', 'user'=>'root', 'password'=>'root', 'charset'=>'utf8', 'dbName'=>'dadaqianduan' ); define('DB_HOST','localhost'); define('DB_USER','root'); define('DB_PWD','root'); define('DB_CHARSET','utf8'); define('DB_DBNAME','dadaqianduan');
鏈接
<?php /** * 鏈接 * @param string $host * @param string $user * @param string $password * @param string $charset * @param string $database * @return object 鏈接標識符 */ function connect1($host,$user,$password,$charset,$database){ $link = mysqli_connect($host,$user,$password) or die('數據庫鏈接失敗'); mysqli_set_charset($link,$charset); mysqli_select_db($link,$database) or die('指定數據庫打開失敗'); return $link; }
鏈接 須要傳遞數組
/** * 鏈接 須要傳遞數組 * @param array $config * @return object */ function connect2($config){ $link=mysqli_connect($config['host'],$config['user'],$config['password']); mysqli_set_charset($link,$config['charset']); mysqli_select_db($link,$config['dbName'] or die('指定數據庫打開失敗'); return $link; }
用常量的形式創建鏈接
/** * 用常量的形式創建鏈接 * @return unknown */ function connect3(){ $link = mysqli_connect(DB_HOST,DB_USER,DB_PWD) or die('數據庫鏈接失敗'); mysqli_set_charset($link,DB_CHARSET); mysqli_select_db($link,DB_DBNAME) or die('指定數據庫打開失敗'); return $link; }
插入操做
/* array( 'username'=>'dada', 'password'=>'dada', 'age'=>'123456', 'regTime'=>'12345' ); INSERT user(username,password,age,regTime) VALUES('dada','dada','12','123123123'); */ /** * 插入操做 * @param object $link * @param array $data * @param string $table * @return boolean */ // 插入的封裝 function insert($link,$data,$table){ $keys=join(',',array_key($data)); $vals = "'".join("','", array_values($data))."'"; $query = "insert{$table}({$keys})values({$vals})"; $res = mysqli_query($link,$query); if($res){ return mysqli_insert_id($link); }else{ return false; } }
更新操做
/* array( 'username'=>'dada', 'password'=>'dada', 'age'=>'12', 'regTime'=>'123123123' ); UPDATE user SET username='dada',password='dada',age='12',regTime='123123123' WHERE id=1 */ /** * 更新操做 * @param object $link * @param array $data * @param string $table * @param string $where * @return boolean */ function update($link, $data, $table, $where = null) { foreach ( $data as $key => $val ) { $set .= "{$key}='{$val}',"; } $set = trim ( $set, ',' ); $where = $where == null ? '' : ' WHERE ' . $where; $query = "UPDATE {$table} SET {$set} {$where}"; $res = mysqli_query ( $link, $query ); if ($res) { return mysqli_affected_rows ( $link ); } else { return false; } }
刪除操做
//DELETE FROM user WHERE id= /** * 刪除操做 * @param object $link * @param string $table * @param string $where * @return boolean */ function delete($link, $table, $where = null) { $where = $where ? ' WHERE ' . $where : ''; $query = "DELETE FROM {$table} {$where}"; $res = mysqli_query ( $link, $query ); if ($res) { return mysqli_affected_rows ( $link ); } else { return false; } }
查詢全部記錄
/** * 查詢全部記錄 * @param object $link * @param string $query * @param string $result_type * @return array|boolean */ function fetchAll($link, $query, $result_type = MYSQLI_ASSOC) { $result = mysqli_query ( $link, $query ); if ($result && mysqli_num_rows ( $result ) > 0) { while ( $row = mysqli_fetch_array ( $result, $result_type ) ) { $rows [] = $row; } return $rows; } else { return false; } }
獲得表中的記錄數
/** * 獲得表中的記錄數 * @param object $link * @param string $table * @return number|boolean */ function getTotalRows($link, $table) { $query = "SELECT COUNT(*) AS totalRows FROM {$table}"; $result = mysqli_query ( $link, $query ); if ($result && mysqli_num_rows ( $result ) == 1) { $row = mysqli_fetch_assoc ( $result ); return $row ['totalRows']; } else { return false; } }
獲得結果集的記錄條數
/** * 獲得結果集的記錄條數 * @param object $link * @param string $query * @return boolean */ function getResultRows($link, $query) { $result = mysqli_query ( $link, $query ); if ($result) { return mysqli_num_rows ( $result ); } else { return false; } }
獲取信息的封裝:
/** * @param object $link */ function getServerInfo($link) { return mysqli_get_server_info ( $link ); } /** * @param object $link */ function getClientInfo($link) { return mysqli_get_client_info ( $link ); } /** * @param object $link */ function getHostInfo($link){ return mysqli_get_host_info($link); } /** * @param object $link */ function getProtoInfo($link) { return mysqli_get_proto_info ( $link ); }
下面展現介紹,思惟導圖以下:
Redis 是一個開源(BSD
許可)的,內存中的數據結構存儲系統,它能夠用做數據庫、緩存和消息中間件。 它支持多種類型的數據結構,如 字符串(strings
), 散列(hashes
), 列表(list
), 集合(sets
), 有序集合(sorted sets
) 與範圍查詢, bitmaps
, hyperloglogs
和 地理空間(geospatial
) 索引半徑查詢。 Redis
內置了 複製(replication
),LUA腳本(Lua scripting
), LRU驅動事件(LRU eviction
),事務(transactions
) 和不一樣級別的 磁盤持久化(persistence
), 並經過 Redis哨兵(Sentinel
)和自動 分區(Cluster
)提供高可用性(high availability
)。
優勢:
IO
操做Redis
安裝
Window
下安裝
下載地址:https://github.com/tporadowski/redis/releases
。
Redis
支持 32 位和 64 位。這個須要根據你係統平臺的實際狀況選擇,這裏咱們下載 Redis-x64-xxx.zip
壓縮包到 C 盤,解壓後,將文件夾從新命名爲 redis
。
打開文件夾,內容以下:
打開一個 cmd
窗口 使用 cd
命令切換目錄到xxx:\redis
運行:
redis-server.exe redis.windows.conf
另啓一個 cmd
窗口,原來的不要關閉,否則就沒法訪問服務端了。
設置一下是否生效:
Composer
是 PHP
用來管理依賴(dependency
)關係的工具。你能夠在本身的項目中聲明所依賴的外部工具庫(libraries
),Composer
會幫你安裝這些依賴的庫文件。
https://getcomposer.org/
點擊Getting Started
點擊下載:
https://developer.aliyun.com/composer?spm=a2c4e.11153940.0.0.40eb6995J6zupg
檢查:
Windows
快速配置NodeJS
配置淘寶鏡像源的命令行:
npm config set registry http://registry.npm.taobao.org
Windows
快速配置Bower
在Windows
下使用phpStudy
安裝
fastadmin.net/go/tencent
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
下載
https://www.bt.cn/?invite_code=MV9veWhubmU=
點擊當即安裝https://www.bt.cn/bbs/thread-19376-1-1.html
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator at admin@php.cn to inform them of the time this error occurred, and the actions you performed just before this error. More information about this error may be available in the server error log.
修改.htaccess
爲如下內容
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
Node.js
(可選,用於安裝Bower和LESS,同時打包壓縮也須要使用到)Composer
(可選,用於管理第三方擴展包)Bower
(可選,用於管理前端資源)Less
(可選,用於編輯less文件,若是你須要增改css樣式,最好安裝上)好了各位,以上就是這篇文章的所有內容,能看到這裏的人都是人才。我後面會不斷更新技術相關的文章,若是以爲文章對你有用,歡迎給個「贊」,也歡迎分享,感謝你們 !!