首页 > php教程 > php手册 > 正文

沈逸老师PHP魔鬼特训笔记(7)--我叫什么名字

php中文网
发布: 2016-09-02 08:42:53
原创
1904人浏览过

一、生成文件夹。  

mkdir();--新建目录

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>
登录后复制

 

 

立即学习PHP免费学习笔记(深入)”;


  然后./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>
登录后复制

 

立即学习PHP免费学习笔记(深入)”;

  参数:filename 文件或目录的路径。

  返回值:如果由 filename 指定的文件或目录存在则返回 TRUE,否则返回 FALSE

 

立即学习PHP免费学习笔记(深入)”;


  我们继续回到课程中来,生成一个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>
登录后复制

 

立即学习PHP免费学习笔记(深入)”;

  OK ,上一节课的作业完成.


 

立即学习PHP免费学习笔记(深入)”;

这节课的主要内容, 新建一个god_frame.php,写一个专门处理骨架的类。

  既然god是用来做“骨架”的。那么我们需要先建立一个构造函数 ,预先把1、骨架的文件夹名,2、骨架的入口文件预定好。然后我们还要创建一个代表god内核的文件夹core,在下面创建一个子文件夹叫做frame,然后再在frame下创建一个叫template的文件夹,最后,把god_frame.php塞到frame下面.

  在写代码之前,我们还要强化一个魔法函数:

  __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;">; 通过这可以发现,会把你尝试加载的类的&ldquo;类名&rdquo;获取到
 }</span>
登录后复制

  然后我们今天还要研究下命名空间namespace。然后用use导入命名空间。

  好了,我们来看看我这节课完成的代码:god_frame.php 

<?<span style="color: #000000;">php
namespace corerame;
</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rame;
</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>?>
登录后复制

 

立即学习PHP免费学习笔记(深入)”;

 版权声明:笔记整理者亡命小卒热爱自由,崇尚分享。但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的《 PHP魔鬼训练课第一阶段》。本学习笔记小卒于博客园首发, 如需转载请尊重老师劳动,保留沈逸老师署名以及课程来源地址。

 

 上一课:沈逸老师PHP魔鬼特训笔记(6)--巫术与骨架

 

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号