本文目錄一覽:
- 1、ThinkPHP中怎麼使用自定義的封裝類
- 2、如何在php擴展中封裝一個c++類
- 3、網上下載了一個封裝好的php源碼,如何在另一個php文件中調用這個get_code_image的函數呢?
- 4、如何使用PHP獲取客戶端及伺服器端IP的封裝類
- 5、ThinkPHP裡面怎麼使用自己封裝的類
ThinkPHP中怎麼使用自定義的封裝類
類文件都是以.class.php為後綴(這裡是指的ThinkPHP內部使用的類庫文件,不代表外部載入的類庫文件),使用駝峰法命名,並且首字母大寫,例如 DbMysql.class.php;
類的命名空間地址和所在的路徑地址一致,例如 Home\Controller\UserController類所在的路徑應該是 Application/Home/Controller/UserController.class.php;
確保文件的命名和調用大小寫一致,是由於在類Unix系統上面,對大小寫是敏感的(而ThinkPHP在調試模式下面,即使在Windows平台也會嚴格檢查大小寫);
類名和文件名一致(包括上面說的大小寫一致),例如 UserController類的文件命名是UserController.class.php, InfoModel類的文件名是InfoModel.class.php, 並且不同的類庫的類命名有一定的規範;
類的導入載入可以參考手冊的命名空間和自動載入,下面是地址:
命名空間:
自動載入:
如何在php擴展中封裝一個c++類
首先,要到了Query歸一化的C++版本源代碼。
query歸一化
引用第三方的類庫有兩種方法,一種是靜態引用,一種是動態引用,推薦使用靜態引用,因為靜態引用的情況下,會把類庫打包到php的擴展.SO文件中,這樣我們不必擔心依賴關係,帶著類庫到處跑了。
先用gcc產生.o文件,再用.o產生 最終的靜態庫 .a 文件
gcc -c -fpic queryword.cpp tradmap.cpp transcode.cpp -I . -O2
ar -r libqueryword.a queryword.o tradmap.o transcode.o
上邊圖中有產生的.o 和 .a文件
如果要動態編譯so的話,就是這個:
gcc -c -fpic -O3 queryword.cpp tradmap.cpp transcode.cpp -I .
gcc -shared queryword.o transcode.o tradmap.o -o libqueryword.so
好,現在有了libqueryword.a靜態庫,我們就可以開始做我們的擴展了。
先使用ext_skel工具生成我們框架的骨架.
./ext_skel –extname=queryword
把上邊的靜態庫放到 ./lib 目錄下。
然後修改config.m4文件。
去掉一些注釋符 dnl, 再添加兩行,最後config.m4里,有用的就是這幾行。
PHP_ARG_ENABLE(queryword, whether to enable queryword support,
Make sure that the comment is aligned:
[ –enable-queryword Enable queryword support])
if test “$PHP_QUERYWORD” != “no”; then
PHP_ADD_INCLUDE(./lib)
PHP_ADD_LIBRARY(stdc++, 1, QUERYWORD_SHARED_LIBADD)
PHP_ADD_LIBRARY_WITH_PATH(queryword, ./lib, QUERYWORD_SHARED_LIBADD)
PHP_REQUIRE_CXX()
PHP_SUBST(QUERYWORD_SHARED_LIBADD)
PHP_NEW_EXTENSION(queryword, queryword.cpp, $ext_shared)
fi
其中:
PHP_REQUIRE_CXX()用於指定這個擴展用到了C++
PHP_ADD_LIBRARY(stdc++, 1, QUERYWORD_SHARED_LIBADD) 用於將標準C++庫鏈接進入擴展
PHP_NEW_EXTENSION用於指定有哪些源文件應該被編譯,文件和文件之間用空格隔開.ext_skel默認生成的模塊框架是針對C的,我們要使用C++,那以上說明的兩個宏就是必須的.另外還要把queryword.c改名成queryword.cpp,所以PHP_NEW_EXTENSION原本包括的queryword.c也要修改.
默認生成的queryword.c(現在改名為queryword.cpp)了,已經包含了一個測試性質的導出函數,通過那個例子就可以大概明白怎麼添加自己的函數了. zend_function_entry是導出函數列表, zend_module_entry描述了模塊的信息. 不過因為是C++了,還是有幾點要修改的,否則跑不起來:
網上下載了一個封裝好的php源碼,如何在另一個php文件中調用這個get_code_image的函數呢?
假設你這個二維碼類的名字是Code
能實例化的,直接new一下,
$xxx = new Code;
$yyy = $xxx-get_code_image(”);
就可以直接調用這個類下的方法了;
如何使用PHP獲取客戶端及伺服器端IP的封裝類
本文實例講述了PHP獲取客戶端及伺服器端IP的封裝類。分享給大家供大家參考,具體如下:
客戶端IP相關的變數:
1. $_SERVER[‘REMOTE_ADDR’]; 客戶端IP,有可能是用戶的IP,也有可能是代理的IP。
2. $_SERVER[‘HTTP_CLIENT_IP’]; 代理端的IP,可能存在,可偽造。
3. $_SERVER[‘HTTP_X_FORWARDED_FOR’]; 用戶是在哪個IP使用的代理,可能存在,可以偽造。
伺服器端IP相關的變數:
1. $_SERVER[“SERVER_NAME”],需要使用函數gethostbyname()獲得。這個變數無論在伺服器端還是客戶端均能正確顯示。
2. $_SERVER[“SERVER_ADDR”],在伺服器端測試:127.0.0.1(這個與httpd.conf中BindAddress的設置值相關)。在客戶端測試結果正確。
類如下:
class getIP{
function clientIP(){
$cIP = getenv(‘REMOTE_ADDR’);
$cIP1 = getenv(‘HTTP_X_FORWARDED_FOR’);
$cIP2 = getenv(‘HTTP_CLIENT_IP’);
$cIP1 ? $cIP = $cIP1 : null;
$cIP2 ? $cIP = $cIP2 : null;
return $cIP;
}
function serverIP(){
return gethostbyname($_SERVER[“SERVER_NAME”]);
}
}
$getIP = new getIP();
$clientIp = getIP::clientIP();
$serverIp = getIP::serverIP();
echo ‘Client IP is ‘,$clientIp,’br /’;
echo ‘Server IP is ‘,$serverIp,’br /’;
ThinkPHP裡面怎麼使用自己封裝的類
TP:是一個PHP開源框架,你可以理解成一個工具箱把。裡面很多類啊,業務邏輯啊都是封裝好的,有自己的使用規則。如果你PHP不是很精通,我建議你還是先去做原生態的PHP,然後再用框架比較好。嘿嘿。
CMS:是一個內容管理系統,它不是一個特定的東西,很多公司都有CMS。
總結:TP是工具,CMS是產品。這樣能理解嗎?
分析:我估計你的意思可能是想找一個目前公司使用比較廣泛的東西,給自己定目標是嗎?怎麼說呢。還是那句話,你的PHP不精通,這兩個弄起來很困難,而且很費時間。不划算,知識這個東西不能空中樓閣,要一點一點的來,慢不怕,關鍵是每一天都有進步。這裡我給你一點建議把。
建議:
1.PHP基礎,函數的使用,自定義函數,變數的作用域,「」的作用等等,都 是基礎的東西。
2.OOP,傳說中的面向對象,這個怎麼說呢,說複雜也複雜,說簡單也簡單,我的方法是你把生活中的東西抽象出來就學的很快。它包括的內容比較寬泛,需要上面第一條的基礎,只要你第一條越紮實,你學OOP就回越快。OOP這個東西是個思想。建議:你開始的時候只要能看懂,能明白別人代碼里OOP的意思就OK了,然後自己寫一寫。這裡還包括有些東西,繼承啊,封裝啊,多態啊。你先了解著三者的用途,然後是抽象類啊,抽象方法啊,他們的規則啊,比如抽象類不需要實現,但其中必須要包含一個抽象方法啊。介面啊,介面是允許繼承多個介面的,然後了解一下介面和抽象類的區別。然後再去研究一下PHP OOP裡面的一些固定的語法或者說是規則。然後就OK拉,西西。
3.了解設計模式,自己寫點東西,對這玩意有所了解,別學完了都忘了。。
4.然後你就可以去看TP或者CMS只類的東西了,對於CMS我建議,你還是先會用,然後再去研究它的構造。西西。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/232237.html