一、生成資料夾。
bool <span style="color: #008080;">mkdir ( <span style="color: #0000ff;">string <span style="color: #800080;">$pathname [, int <span style="color: #800080;">$mode = 0777 [, bool <span style="color: #800080;">$recursive = <span style="color: #0000ff;">false [, <span style="color: #0000ff;">resource <span style="color: #800080;">$context ]]] )<br>//尝试新建一个由 pathname 指定的目录。</span></span></span></span></span></span></span></span>
參數:pathname:
目錄的路徑。
mode:
預設的 mode 是 0777,表示最大可能的存取權。有關 mode 的更多資訊請閱讀 chmod() 頁面。
看到上面的函數了嗎?記牢。上課沈老師留了一個作業,讀取god.json文件,產生一個最簡單的」骨架」。 1、接受參數 start。 2.根據prj_name的值產生一個資料夾。 3.在新建的資料夾中預設產生一個index.php。
OK,我們先實現第一步,在godinit檔案中寫一個方法
<span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> start(){ </span><span style="color: #800080;">$get_config</span> =<span style="color: #000000;"> loadConfig(); </span><span style="color: #008080;">mkdir</span>(<span style="color: #008080;">getcwd</span>()."/".<span style="color: #800080;">$get_config</span>-><span style="color: #000000;">prj_name); }</span>
然後./god start,在我的檔案路徑中,就產生了一個project資料夾。當然,這是課程演示,我們還需要判斷下資料夾是否已經存在,不存在才創建,存在的話就不創建。
改進下這個start()方法:
<span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> start(){ </span><span style="color: #800080;">$get_config</span> =<span style="color: #000000;"> loadConfig(); </span>!<span style="color: #008080;">file_exists</span>(<span style="color: #008080;">getcwd</span>()."/".<span style="color: #800080;">$get_config</span>->prj_name) && <span style="color: #008080;">mkdir</span>(<span style="color: #008080;">getcwd</span>()."/".<span style="color: #800080;">$get_config</span>-><span style="color: #000000;">prj_name); }</span>
上面出現一個函數:file_exists();--檢查檔案或目錄是否存在。我們再來強化下:
bool <span style="color: #008080;">file_exists</span> ( <span style="color: #0000ff;">string</span> <span style="color: #800080;">$filename</span><span style="color: #000000;"> ) </span><span style="color: #008000;">//</span><span style="color: #008000;">检查文件或目录是否存在。</span>
參數:filename
檔案或目錄的路徑。
回傳值:如果由 filename
指定的檔案或目錄存在則回傳 FALSE。
我們繼續回到課程中來,產生一個PHP檔案:
<span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> start(){ </span><span style="color: #800080;">$get_config</span> =<span style="color: #000000;"> loadConfig(); </span><span style="color: #008000;">//</span><span style="color: #008000;">判断并生成新的文件夹,没有就创建</span> !<span style="color: #008080;">file_exists</span>(<span style="color: #008080;">getcwd</span>()."/".<span style="color: #800080;">$get_config</span>->prj_name) && <span style="color: #008080;">mkdir</span>(<span style="color: #008080;">getcwd</span>()."/".<span style="color: #800080;">$get_config</span>-><span style="color: #000000;">prj_name); </span><span style="color: #008000;">//</span><span style="color: #008000;">在该文件夹下判断并生成一个index.php文件,没有就创建</span> !<span style="color: #008080;">file_exists</span>(<span style="color: #008080;">getcwd</span>()."/".<span style="color: #800080;">$get_config</span>->prj_name."/index.php") && <span style="color: #008080;">file_put_contents</span>(<span style="color: #008080;">getcwd</span>()."/".<span style="color: #800080;">$get_config</span>->prj_name."/index.php",""<span style="color: #000000;">); }</span>
OK ,上一堂課的作業完成.
這堂課的主要內容, 新建一個god_frame.php,寫一個專門處理骨架的類別。
既然god是用來做「骨架」的。那我們需要先建立一個建構函式 ,預先把1、骨架的資料夾名,2、骨架的入口檔案預定好。然後我們還要創建一個代表god內核的資料夾core,在下面創建一個子資料夾叫做frame,然後再在frame下創建一個叫template的資料夾,最後,把
god_frame.php__autoload();-- 嘗試載入未定義的類別
void __autoload ( <span style="color: #0000ff;">string</span> <span style="color: #800080;">$class</span><span style="color: #000000;"> ) </span><span style="color: #008000;">//</span><span style="color: #008000;">你可以通过定义这个函数来启用类的自动加载。</span>
參數:class--待載入的類別名稱
<span style="color: #008000;">//</span><span style="color: #008000;">示例 //尝试加载 未定义的类,如果加载了未定义的类,则会自动进入这个函数(如果你写了的话)</span> <span style="color: #0000ff;">function</span> __autoload(<span style="color: #800080;">$classname</span>) <span style="color: #008000;">//</span><span style="color: #008000;">接收一个参数</span> <span style="color: #000000;">{ </span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$classname</span><span style="color: #000000;">; 通过这可以发现,会把你尝试加载的类的“类名”获取到 }</span>
然后我们今天还要研究下命名空间namespace。然后用use导入命名空间。
好了,我们来看看我这节课完成的代码:god_frame.php
<?<span style="color: #000000;">php namespace core\frame; </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> god_frame { </span><span style="color: #0000ff;">public</span> <span style="color: #800080;">$project_folder</span> = ''; <span style="color: #008000;">//</span><span style="color: #008000;">项目文件夹</span> <span style="color: #0000ff;">public</span> <span style="color: #800080;">$project_main</span> = ''; <span style="color: #008000;">//</span><span style="color: #008000;">入口文件</span> <span style="color: #0000ff;">function</span> __construct(<span style="color: #800080;">$prjName</span>){ <span style="color: #008000;">//</span><span style="color: #008000;">构造函数</span> <span style="color: #800080;">$this</span>->project_folder = <span style="color: #008080;">getcwd</span>()."/".<span style="color: #800080;">$prjName</span><span style="color: #000000;">; </span><span style="color: #800080;">$this</span>->project_main = <span style="color: #800080;">$this</span> -> project_folder."/index.php"<span style="color: #000000;">; } </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> run(){ </span><span style="color: #008000;">//</span><span style="color: #008000;">判断并生成新的文件夹,没有就创建</span> !<span style="color: #008080;">file_exists</span>(<span style="color: #800080;">$this</span>->project_folder) && <span style="color: #008080;">mkdir</span>(<span style="color: #800080;">$this</span>-><span style="color: #000000;">project_folder); </span><span style="color: #008000;">//</span><span style="color: #008000;">在该文件夹下判断并生成一个index.php文件,没有就创建</span> !<span style="color: #008080;">file_exists</span>(<span style="color: #800080;">$this</span>->project_main ) && <span style="color: #008080;">file_put_contents</span>(<span style="color: #800080;">$this</span>->project_main,""<span style="color: #000000;">); } } </span>?>
<span style="color: #008000;">//</span><span style="color: #008000;">godinit</span> <?<span style="color: #000000;">php </span><span style="color: #008080;">define</span>('cstring','json'<span style="color: #000000;">); </span><span style="color: #0000ff;">require</span>('godconfig.php'); <span style="color: #008000;">//</span><span style="color: #008000;">引入gonconfig这个文件</span> <span style="color: #0000ff;">use</span><span style="color: #000000;"> core\frame; </span><span style="color: #0000ff;">function</span> __autoload(<span style="color: #800080;">$className</span><span style="color: #000000;">){ </span><span style="color: #800080;">$className</span> = <span style="color: #008080;">str_replace</span>('\\','/',<span style="color: #800080;">$className</span>).'.php'<span style="color: #000000;">; </span><span style="color: #0000ff;">require</span> (<span style="color: #800080;">$className</span><span style="color: #000000;">); } </span><span style="color: #0000ff;">class</span> godinit <span style="color: #008000;">//</span><span style="color: #008000;">创建一个类,godinit</span> <span style="color: #000000;">{ </span><span style="color: #0000ff;">static</span> <span style="color: #800080;">$v</span>="god version is 1.2"; <span style="color: #008000;">//</span><span style="color: #008000;">声明一个静态属性$VERSION</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span> init() <span style="color: #008000;">//</span><span style="color: #008000;">静态方法 init</span> <span style="color: #000000;"> { </span><span style="color: #0000ff;">echo</span> "input your project name?".<span style="color: #ff00ff;">PHP_EOL</span><span style="color: #000000;">; </span><span style="color: #800080;">$prj_name</span> = <span style="color: #008080;">fgets</span>(STDIN); <span style="color: #008000;">//</span><span style="color: #008000;">重新获取用户输入,并赋值给$prj_name</span> <span style="color: #0000ff;">echo</span> "input your author name?".<span style="color: #ff00ff;">PHP_EOL</span><span style="color: #000000;">; </span><span style="color: #800080;">$prj_author</span> = <span style="color: #008080;">fgets</span>(STDIN); <span style="color: #008000;">//</span><span style="color: #008000;">重新获取用户输入,并赋值给$prj_author</span> genConfig(TC(<span style="color: #0000ff;">array</span>('prj_name'=><span style="color: #800080;">$prj_name</span>,'prj_author'=><span style="color: #800080;">$prj_author</span><span style="color: #000000;">))); } </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> ini(){ </span><span style="color: #800080;">$get_config</span> =<span style="color: #000000;"> loadConfig(); </span><span style="color: #0000ff;">foreach</span>(<span style="color: #800080;">$get_config</span> <span style="color: #0000ff;">as</span> <span style="color: #800080;">$k</span>=><span style="color: #800080;">$v</span><span style="color: #000000;">) </span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$k</span>.":".<span style="color: #800080;">$v</span><span style="color: #000000;">; } </span><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> start(){ </span><span style="color: #800080;">$get_config</span> =<span style="color: #000000;"> loadConfig(); </span><span style="color: #800080;">$gf</span> = <span style="color: #0000ff;">new</span> god_frame(<span style="color: #800080;">$get_config</span>-><span style="color: #000000;">prj_name); </span><span style="color: #800080;">$gf</span> -><span style="color: #000000;"> run(); } </span><span style="color: #008000;">/*</span><span style="color: #008000;"> static function make() { $pchar=new Phar("god.phar"); $pchar->buildFromDirectory(dirname(__FILE__)); $pchar->setStub($pchar->createDefaultStub('god')); $pchar->compressFiles(Phar::GZ); }</span><span style="color: #008000;">*/</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span> __callStatic(<span style="color: #800080;">$p1</span>,<span style="color: #800080;">$p2</span><span style="color: #000000;">){ </span><span style="color: #0000ff;">echo</span> "error function"<span style="color: #000000;">; } } </span>?>
版权声明:笔记整理者亡命小卒热爱自由,崇尚分享。但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的《 PHP魔鬼训练课第一阶段》。本学习笔记小卒于博客园首发, 如需转载请尊重老师劳动,保留沈逸老师署名以及课程来源地址。
上一课:沈逸老师PHP魔鬼特训笔记(6)--巫术与骨架