※ 引述《HuangJC (吹笛牧童)》之銘言:
: 初到貴寶地
: ;;
: PHP 是直譯語言
: 和 C++ 編譯語言不同
: 不能利用 compiler 工具找到函式定義讓我蠻辛苦的
: (當然,它有它的強項)
: 今天的問題是,當我不懂某個指令時,我該怎麼去找到它的說明
: 出自 PhpBB 3.0 版
: $user = new user();
: 這一句,一開始我猜 user() 是內建指令
: 查了 PHP Manual 查不到
: 再來以為是 user defined class
: 用跨檔搜尋也找不到 user() 關鍵字
: 那麼 user() 是怎麼可以用的呢?
: 以上,謝謝
我自己重回這個問題好了,現在我有不同的作法
http://localhost 嘗試起的話,一般是 index.php
打開程式,用二分搜尋法去找
echo isset($user);exit;
就這樣,如果某行已經定義了,就往前找
夾擠到正好定義那行,可能是呼叫別的函式,或者 require 別的檔案
搜尋,開檔,繼續夾擠
為什麼會學到這種技巧? ~^_^~
因為 php 太強了,支援動態產生許多東西
有些 name 根本不存在於 code 內,永遠都無法搜尋到
甚至有 __call 這種萬用轉向馬上生函式的大絕.. *_*
因為我找 $this->User->findbyemail 函式,找三天了 *_* (CakePHP 語法..)
所以我深刻的知道..
全域搜尋 findbyeamil,永遠找不到
printr($this->User);
這是我另一個希望,以為 findbyeamil 是一個變數,裏面存的是一個函式指標
如果我可以 dump 它出來,我就可以知道它去 call 誰
結果也沒有..
good die no die,我學到了這個,人生變成彩色 :)
xdebug_start_trace()
xdebug_stop_trace()
也就是 XDebug 系列 (果然 XD)
只夾擠一行 findbyemail,竟然給我生一大串 log
這才硬生生看到 __call 這個大絕怪獸!!
看完後的感想是
幸好我已經交了作業,自己拼裝出 mysql 語法
不然我想移植這套給 phpbb2,只怕是小題大作了....
前情提要:我要合併兩個獨立的 PHP 程式,一個是抓來的 phpbb2
兩個程式間如果有全域變數當然方便啦,可惜沒有
也因為見不到對方,沒有對方的物件及函式,所以無法使用對方的函式
唯一能乾淨見到的就是雙方的 database
所以不如直接取 database 出來改
而我語法不熟,就肖想去搬對方的內部 code 來用...
比如,我也要抓 cake 那邊的使用者帳號
所以乾脆去搬它的 findbyemail 過來.....
如果我這麼做,怕再兩個月也還寫不出來吧 :P
(三點,今天進度不錯 XD)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.219.65.16