PHP學習筆記

来源:http://www.cnblogs.com/shaoxiaoyun/archive/2016/09/02/5832409.html
-Advertisement-
Play Games

PHP(personal homepage)是HTML內嵌式語言,是一種在伺服器端執行的嵌入HTML文檔的腳本語言。由zend公司維護。為什麼要安裝web伺服器?因為我們瀏覽器要取數據,從web伺服器湖獲取。httpwatch工具可以獲取發送和接受的數據,有利於我們瞭解的更透徹。伺服器除Appche ...


PHP
(personal homepage)是HTML內嵌式語言,是一種在伺服器端執行的嵌入HTML文檔的腳本語言。由zend公司維護。
為什麼要安裝web伺服器?因為我們瀏覽器要取數據,從web伺服器湖獲取。httpwatch工具可以獲取發送和接受的數據,有利於我們瞭解的更透徹。伺服器除Appche還有微軟iis伺服器、lighttpd伺服器(讀ligty)等.

Appche伺服器

Appche伺服器跨所有平臺。可以通過ssh軟體遠程式控制制伺服器。這時候要使用命令行。管理appche可以使用命令行。cd:切換目錄。appache啟動以後,會占用一個埠,預設80埠監聽。一臺機器可以有1-65535號埠,在開發中,可以使用netstat -an來查看有哪些埠在監聽。埠越少越安全。如果發現有異常埠監聽,則可以關閉該埠。用netstat -anb發現是哪個程式在監聽,從而關閉。一個埠只能被一個程式監聽。自己電腦發送請求時也有埠,是隨機分配的,包含在URL中,用完就釋放了。

appche目錄結構
bin目錄用於存放常用命令
cgi-bin該目錄存放Linux下常用命令
conf目錄用來存放配置文件
error目錄存放啟動和關閉時的錯誤記錄
htdocs目錄用於存放站點文件(html)多個站點可以通過文件夾分類。
icons目錄存放圖標
logs目錄記錄appche相關日誌
manual目錄手冊
modules目錄appche模塊appche以模塊形式管理

虛擬主機的配置步驟

1.在httpd-conf中啟用httpd-vhosts.conf文件 

2.在httpd-vhosts.conf文件中做配置

3.修改hosts文件(重新審視訪問一個網頁的真正流程)
詳細說明訪問網頁的流程 
瀏覽器回車後發生的事
1.解析主機名
2.查詢本地文件hosts(windows下),該文件里有一個IP地址,查詢和功能變數名稱的關係,查詢不到,轉到外網dns功能變數名稱伺服器查詢IP和功能變數名稱的關係,查到了會向appche發送http請求,appche拿到請求後要解析主機,解析web站點名稱解析資源名稱,取出一個資源文件,如果取到了,則返回該頁面。

一個IP(多個埠)和多個功能變數名稱綁定
方案一:通過埠來區分不同的站點

1.先開發好自己的網站

2.配置我們的httpd.conf文件 啟用裡面的virual hosts文件,即啟動虛擬主機的配置

3.配置httpd-hosts.conf文件。

4 在hosts文件中添加IP和功能變數名稱的對應關係

 添加一個新的功能變數名稱與該IP綁定
1.開發新的網站

2.添加新的虛擬主機

3在httpd.conf中讓appche監聽81埠,appche可以同時監聽多個埠

4在hosts文件中添加新的功能變數名稱

方案二:通過servername端區分不同的功能變數名稱

1.開發新網站

2.在httpd-vhosts.conf文件中添加配置文件,和方案一配置有所區別,要指定功能變數名稱ServerName www.sth.com。

3.在hosts文件中添加IP和功能變數名稱的對應關係,和方案一相同。

網站資源文件(包括PHP文件)和appche在同一臺機器,叫應用伺服器,瀏覽器在另一臺機器。資料庫一般不在應用伺服器,在專門資料庫伺服器上。

appche和PHP需要整合,PHP調用過程如下
瀏覽器回車,解析主機名例如sohu,查詢和主機名對應的IP,查不到就到外網dns查詢,查到了,拿到IP後向appche發送http請求,appche解析主機(appche管理多個功能變數名稱),取出站點/目錄,解析出資源名(網站的具體哪一頁),將請求文件返回,PHP代碼在appche已經執行完了,瀏覽器拿到的是伺服器執行完後的代碼,再解析後顯示出來。
PHP代碼修改了不需要重啟appche。

PHP基本語法
<?php ?>和HTML可以相互嵌套。
註釋:/**/多行,//單行 ,#Unix風格。

PHP基本語法、變數,常量,數據類型
1 php中定義一個變數要以$符號開頭,變數的數據類型不是固定的,是根據運行時上下文確定的。所以PHP是弱數據類型編程語言。

2.PHP區分大小寫。
一個有效的變數由字母或下劃線開頭
基本數據類型:整型,浮點型,布爾型,字元串型
複合數據類型:數組,對象
特殊數據類型:null 資源類型
PHP中,一個整數一般占四個位元組,一個位元組占8bit,最高位表示符號位,0表示正數,1表示負數PHP_INT_SIZE
一個整數最大是多少?用PHP_INT_MAX可查看,負整數和正整數最大值(絕對值)一樣。如果整數範圍超出最大範圍,則自動類型變為float類型。

浮點數:精度最大14位,從左邊開始計算,第一個非0的數開始計算精度

字元型:一個字元占用一個位元組,理論上沒有大小限制,只要不超過記憶體就可以
比較符==等於,===全等
邏輯異或Xor:兩個有一個為true,但不同時為true ,為true

三元運算符
表達式1?表達式2:表達式3

字元串運算符
.:連接兩個字元串(基本數據類型)

類型運算符
instanceof用於確定一個變數是否屬於某一類型(只能判斷對象類型)

三大流程式控制制語句
1.順序控制
2.迴圈控制
3.條件控制
switch(表達式){
case 常量1:語句;
break;
case 常量2:語句;
break;
case 常量3:語句;
break;
case 常量n:語句;
break;
defual:語句;//可以沒有
break;
}
break語句:結束當前的迴圈或switch語句,可以給一個數字表示退出到第幾層。break 3;
break代表不玩游戲了,continue表示重新從第一關開始玩。
continue也可以帶一個數字,表示從第幾層開始走
常量:前面不需要$符號。用define()函數定義,而不能通過賦值語句;常量的值是標量[基本數據類型](string,integer,float,boolean),一旦定義,不能修改其值。,不希望某個值變化時使用常量,比如圓周率,稅率。
常量的名稱全部大寫,用下劃線間隔
定義常量兩種方法:
define("TAX_RATE",0.08);
const TAX_RATE2=0.1;

函數:調用:require 'funcs.php';
function 函數名(參數列表){
//函數體;
//return 語句,返回一個結果,可以沒有。

}

PHP中頁面相互調用
為了完成a.php中可以使用到function01.php中定義的函數,我們需要使用以下函數:
require()和require_once()函數。
include()和include_once()函數。
<?php
require('要引入的文件名');

$filePath="a.php";//通過變數引入
require $filePath;

require '要引入的文件名';
?>

執行一個函數時,會從一個新棧執行函數里的代碼,然後返回到函數調用處,然後繼續執行下麵的代碼。

require_once的優點:
前者遇到即包含文件,後者會判斷是否已經包含了該文件,如果包含過來則不再包含。一可以節省資源,二可以避免重覆定義的錯誤。

include和include_once
都可以把一個頁麵包含到另一個頁面,用法同上

require和include區別
include遇到錯誤會繼續執行,require會終止執行
推薦使用require_once,通常放在php頁面最前面

如何理解函數的調用過程
按照函數執行的規則,只要一看到函數立刻開闢新棧,各個棧之間的變數是相互獨立的(空間相互獨立)。

函數參數和變數作用域:

1.函數的參數列表可以有多個參數
2.參數列表數據類型可以是多個類型,PHP支持的任意類型
3.函數的命名跟自定義變數一樣,但是不區分大小寫
4.一個自定義函數中定義的變數是局部的,函數外不生效
5.使用global全局變數的時候,可使用在函數外的變數
$a=12;
function abc3(){

global $a;//要在abc3()中使用外層$a
$a+=45;

}
abc3();
echo $a;
6.為了防止全局變數的混亂,可以使用unset($var)刪除一個變數
例:$a=12;
function abc($a){

unset($a);//表示不再abc函數範圍內,不使用$a,後面重新定義。
$a=45;
}
abc($a);
echo $a;

7.函數的預設值問題
可以給某些參數賦一個預設值
function abc($b,$a=2){

$res=$a+$b;
return $res;
}
$e=70;
echo abc($e).'||';//72,$a預設為2
acho abc($e,90);//160
$f=80;
echo abc($e,$f);
8.PHP預設是值傳遞,如果需要地址傳遞,
function abc(&$b){//加地址符

$b=314;
}
abc($a);//$a的地址指向$b的地址
echo $a;//314位運算

二進位:逢二進一,使用二進位只有0和1兩個數,易於電子方式實現,同時,通過0和1的組合,可以表示任何一個數。
1.二進位的最高位是符號位,0表示正數,1表示負數
2.正數的原碼、反碼和補碼都一樣
用二進位表示一個數,這個碼就是源碼
1.......>原碼 00000000 00000000 00000000 00000001
負數的反碼:原碼符號位不變,其他為取反
-1......>原碼 10000000 00000000 00000000 00000001
-1......>反碼 11111111 11111111 11111111 11111110
負數的補碼:它的反碼加1
-1......>補碼 11111111 11111111 11111111 11111111
0的反碼、補碼都是0
PHP沒有無符號數,只要是數,最高位就是符號
在電腦運算的時候,都是以補碼的方式來計算的
不管是正數還是負數,都要被轉化成補碼,然後進行計算

位運算符
$a & $b And(按位與) 將把$a和$b中都為1的位設為1.
$a | $b Or(按位或) 將把$a或者$b中為1的位設為1.
$a ^ $b Xor (按位異或) 將把$a和$b中不同的位設為1.
~$a Nor (按位取反) 將把$a中為0的位設為1,反之亦然.
$a << $b shift left 將把$a中的位向左移動$b次(每次移動都表示乘以2).
$a >> $b shift right 將把$a中的位向右移動$b次(每次移動都表示除以2).
前面四個叫位運算,後面兩個是移位運算
~2=?
1.求出2的補碼 00000000 00000000 00000010
2.取反 11111111 11111111 11111101(補碼)-》原碼
11111111 11111111 11111100 //補碼減一得到反碼
10000000 00000000 00000011 //-3
所以, ~2=-3
位移運算規則
算術右移:低位溢出,符號位不變,並用符號位補溢出的高位
算術左移:符號位不變,低位補0
$a=1>>2;
1.找到1的補碼:00000000 00000000 000000000 00000001
00000000 00000000 000000000 00000000
$a=0;
$b=-1>>2;
1.找到-1的補碼:10000000 00000000 00000000 00000001
11111111 11111111 11111111 11111110
11111111 11111111 11111111 11111111
2.算術右移兩位 11111111 11111111 11111111 11111111
結果補碼--原碼 、
1111111 11111111 11111111 11111110(減一變反碼)
10000000 00000000 000000000 00000001(原碼)//-1
-1>>2=-1;

$c=1<<2;
1的補碼:00000000 00000000 00000000 00000001
左移兩位 00000000 00000000 00000000 00000100 //4

數組、排序、查找
為了知道數組中總共有多少個元素,可以使用系統函數count:count(數組名);

數組創建
數組是關鍵字和值的集合

.創建數組一
1.$arr[0]=123;
$arr[1]=90;
$arr[2]=8;
數組在記憶體中的存在方式:每個數組元素分配一個空間,$arr相當於樓層,每個元素代表一個房間
在PHP數組中,每個元素值的數據類型不限制
.創建數組二
$數組名=array(值1,值2,值3...);

下標又叫關鍵字,可以是數字,也可以自己指定(預設情況下,我們的元素的下標是從0開始給你編號)
$arr['logo']="beijing";
#arr['php']=123;
或者
$arr=array<"logo"=>"北京","php"=>123>

如果我們創建一個數組時,沒有給某個元素指定下標,PHP就會自動用目前最大的那個下標值,加上1作為該元素的下標(關鍵字)
我們通常可以使用print_r來顯示這個數組情況
var_dump($arr)可以更加詳細的顯示數組的信息
一維數組使用陷阱
$arr[bar]='hello world';這樣使用危險,不要這樣用
PHP數組相關函數
count函數:由於統計數組元素有多少個 count(數組名)。
is_array函數
print_r()和var_dump()函數。
explode函數:拆分字元串$arr=explode(" ",$str);//用空格拆分字元串$str.

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Asp.net MVC中的ViewData與ViewBag ViewData ViewBag 它是Key/Value字典集合 它是dynamic類型對像 從Asp.net MVC 1 就有了 ASP.NET MVC3 才有 基於Asp.net 3.5 framework 基於Asp.net 4.0與 ...
  • /** * 組合微信app支付 獲得prepayid * @param int $order_num */ private function _wxpay_request($order_num = 0) { //判斷訂單編號必須是數組並且不為0 check_order_num($order_num) ...
  • 一、HTTPS簡介 HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer),簡單來講就是加了安全的HTTP,即HTTP+SSL;我們知道HTTP通訊時,如果客戶端C請求伺服器S,那麼可以通過網路抓包的形式來獲取信息,甚至可以模擬伺服器 ...
  • //壓入首字母 foreach ($res as $k => $v) { $res[$k]['first'] = strtoupper(substr(trim($v['name']), 0, 1)); $arr = array('A', 'B', 'C', 'D', 'E', 'F', 'G', ' ...
  • array_sum(array_column($attr, '欄位')); ...
  • 本節作業: 選課系統 角色:學校、學員、課程、講師要求:1. 創建北京、上海 2 所學校2. 創建linux , python , go 3個課程 , linux\py 在北京開, go 在上海開3. 課程包含,周期,價格,通過學校創建課程 4. 通過學校創建班級, 班級關聯課程、講師5. 創建學員 ...
  • 轉載請標明出處; 最近在看redis的代碼,發現了有關函數指針的部分,想把它記下來。 在redis中有類似下麵的定義,利用typedef 定義了一個新的類型,這種類型是一個函數: 然後可以用這個類型定義一個指針,這個指針指向一個函數,具體redis中使用如下(具體redis的源碼解析,後面的文章中還 ...
  • 問題就是對一個list中的新聞id進行去重,去重之後要保證順序不變。 直觀方法 最簡單的思路就是: 複製代碼代碼如下: ids = [1,2,3,3,4,2,3,4,5,6,1]news_ids = []for id in ids: if id not in news_ids: news_ids.a ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...