沈逸老师PHP魔鬼特训笔记(7)--我叫什么名字
一、生成文件夹。
mkdir();--新建目录
bool mkdir ( string $pathname [, int $mode = 0777 [, bool $recursive = false [, resource $context ]]] )
//尝试新建一个由 pathname 指定的目录。
参数:pathname:目录的路径。
mode:默认的 mode 是 0777,意味着最大可能的访问权。有关 mode 的更多信息请阅读 chmod() 页面。
看到上面的函数了吗?记牢。上节课沈老师留了一个作业,读取god.json文件,生成一个最简单的”骨架”。1、接受参数 start。2、根据prj_name的值生成一个文件夹。3、在新建的文件夹中默认生成一个index.php。
OK,我们先实现第一步,在godinit文件中写一个方法
static function start(){
$get_config = loadConfig();
mkdir(getcwd()."/".$get_config->prj_name);
}
然后./god start,在我的文件路径中,就生成了一个project文件夹。当然,这是课程演示,我们还需要判断下文件夹是否已经存在,不存在才创建,存在的话就不创建。
改进下这个start()方法:
static function start(){
$get_config = loadConfig();
!file_exists(getcwd()."/".$get_config->prj_name) && mkdir(getcwd()."/".$get_config->prj_name);
}
上面出现一个函数:file_exists();--检查文件或目录是否存在。我们再来强化下:
bool file_exists ( string $filename )
//检查文件或目录是否存在。
参数:filename 文件或目录的路径。
返回值:如果由 filename 指定的文件或目录存在则返回 TRUE,否则返回 FALSE。
我们继续回到课程中来,生成一个PHP文件:
static function start(){
$get_config = loadConfig();
//判断并生成新的文件夹,没有就创建
!file_exists(getcwd()."/".$get_config->prj_name) && mkdir(getcwd()."/".$get_config->prj_name);
//在该文件夹下判断并生成一个index.php文件,没有就创建
!file_exists(getcwd()."/".$get_config->prj_name."/index.php") && file_put_contents(getcwd()."/".$get_config->prj_name."/index.php","");
}
OK ,上一节课的作业完成.
这节课的主要内容, 新建一个god_frame.php,写一个专门处理骨架的类。
既然god是用来做“骨架”的。那么我们需要先建立一个构造函数 ,预先把1、骨架的文件夹名,2、骨架的入口文件预定好。然后我们还要创建一个代表god内核的文件夹core,在下面创建一个子文件夹叫做frame,然后再在frame下创建一个叫template的文件夹,最后,把god_frame.php塞到frame下面.
在写代码之前,我们还要强化一个魔法函数:
__autoload();-- 尝试加载未定义的类
void __autoload ( string $class )
//你可以通过定义这个函数来启用类的自动加载。
参数:class--待加载的类名
//示例
//尝试加载 未定义的类,如果加载了未定义的类,则会自动进入这个函数(如果你写了的话)
function __autoload($classname) //接收一个参数
{
echo $classname; 通过这可以发现,会把你尝试加载的类的“类名”获取到
}
然后我们今天还要研究下命名空间namespace。然后用use导入命名空间。
好了,我们来看看我这节课完成的代码:god_frame.php
<?php
namespace core\frame;
class god_frame
{
public $project_folder = ''; //项目文件夹
public $project_main = ''; //入口文件
function __construct($prjName){ //构造函数
$this->project_folder = getcwd()."/".$prjName;
$this->project_main = $this -> project_folder."/index.php"; }
function run(){
//判断并生成新的文件夹,没有就创建
!file_exists($this->project_folder) && mkdir($this->project_folder);
//在该文件夹下判断并生成一个index.php文件,没有就创建
!file_exists($this->project_main ) && file_put_contents($this->project_main,"");
}
}
?>
//godinit
<?php
define('cstring','json');
require('godconfig.php'); //引入gonconfig这个文件
use core\frame;
function __autoload($className){
$className = str_replace('\\','/',$className).'.php';
require ($className);
}
class godinit //创建一个类,godinit
{
static $v="god version is 1.2"; //声明一个静态属性$VERSION static function init() //静态方法 init
{
echo "input your project name?".PHP_EOL;
$prj_name = fgets(STDIN); //重新获取用户输入,并赋值给$prj_name echo "input your author name?".PHP_EOL;
$prj_author = fgets(STDIN); //重新获取用户输入,并赋值给$prj_author
genConfig(TC(array('prj_name'=>$prj_name,'prj_author'=>$prj_author)));
}
function ini(){
$get_config = loadConfig();
foreach($get_config as $k=>$v)
echo $k.":".$v;
}
static function start(){
$get_config = loadConfig();
$gf = new god_frame($get_config->prj_name);
$gf -> run();
}
/* static function make()
{
$pchar=new Phar("god.phar");
$pchar->buildFromDirectory(dirname(__FILE__));
$pchar->setStub($pchar->createDefaultStub('god'));
$pchar->compressFiles(Phar::GZ);
}*/
static function __callStatic($p1,$p2){
echo "error function";
}
}
?>
版权声明:笔记整理者亡命小卒热爱自由,崇尚分享。但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的《 PHP魔鬼训练课第一阶段》。本学习笔记小卒于博客园首发, 如需转载请尊重老师劳动,保留沈逸老师署名以及课程来源地址。
下一课:沈逸老师PHP魔鬼特训笔记(8)
沈逸老师PHP魔鬼特训笔记(7)--我叫什么名字的更多相关文章
- 沈逸老师PHP魔鬼特训笔记(8)
创建模板文件: 这节课老师带领我们开始创建TEMPLATE,按照老师教导的思路,我们希望这样一种代码写法:1.譬如我定义一个变量$name=‘’;2.然后呢我读取一个模板.3.再然后我在这个模板里 设 ...
- 沈逸老师PHP魔鬼特训笔记(6)--巫术与骨架
PHP最牛逼的特性之一除了懒人函数,还有一些魔法函数. 首先我们来认识下__tostring,通过一个巫术方法,我们吧实例转化过后的类,直接当字符串输出.结合我们前面所做的功能,我们在类里面加上这个函 ...
- 沈逸老师PHP魔鬼特训笔记(10)
为了防止代码让我们混淆不清,大家看视频中的分离方法 1.新建了一个文件夹叫code (这代表是代码) 2.再新建一个文件夹叫page (这代表是页面) 代码该怎么写呢? 这里要记住口诀 1.index ...
- 沈逸老师PHP魔鬼特训笔记(9)--进化
回到第一课,我们学过PHP母体,了解过解析PHP程序.PHP其实内置了一个web服务器,专门给我们开发测试使用,那么接下来我们要完成的是:生成后创建一个web 服务,在浏览器中可以访问. PHP的母体 ...
- 沈逸老师PHP魔鬼特训笔记(5)
接上一节课,我们专门新建了一个godconfig类,设置了两个属性prj_name(项目名),prj_author(作者),然后我们获取标准输入(stdin)把结果保存在了类里面. 好吧,这节课的名字 ...
- 沈逸老师PHP魔鬼特训笔记(4)
上一课我们通过shell脚本拷贝代码,了解了静态方法和静态属性.(还有个附件PHAR包,我直接无视了) 然后在GOD文件中写了一些参数, 我们也可以这样,把方法名像拼凑字符串一样拼起来. $get_p ...
- 沈逸老师PHP魔鬼特训笔记(3)
一.由于上两节课我们把程序放到了/usr/local/bin里面.每次编辑需要sudo .这节课我们使用PHPSTORM来编辑代码,专门把它拷贝出来,然后放到一个叫做home/godpro的文件夹下. ...
- 沈逸老师PHP魔鬼特训笔记(1)
此课程个人开发环境可以考虑使用Ubuntu ,推荐sublime和PhpStorm作为开发环境.一.PHP的一大特性是:脚本语言.不要编译,写完就可以运行? 然而并不是....... PHP代码要想运 ...
- 沈逸老师PHP魔鬼特训笔记(2)
一.这一课会学习到几个懒人函数: 1.file_put_contents (PHP 5, PHP 7) file_put_contents — 将一个字符串写入文件 说明 int file_put_c ...
随机推荐
- POJ 1556 The Doors(线段交+最短路)
The Doors Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5210 Accepted: 2124 Descrip ...
- CSS画出的各种形状图
利用CSS可以画出各种需要的图形目录[1]矩形[2]圆形[3]椭圆[4]直角三角形[5]正三角形[6]平行四边形[7]梯形[8]六角星[9]六边形[10]五角星简单图形 矩形div{ width: 1 ...
- 我对CONTAINING_RECORD宏的详细解释
宏CONTAINING_RECORD的用处其实还是相当大的, 而且很是方便, 它的主要作用是: 根据结构体中的某成员的指针来推算出该结构体的指针! 下面从一个简单的例子开始说起: 我们定义一个结构体, ...
- 在WPF程序中使用摄像头兼谈如何使用AForge.NET控件(转)
前言: AForge.NET 是用C#写的一个关于计算机视觉和人工智能领域的框架,它包括图像处理.神经网络.遗传算法和机器学习等.在C#程序中使用摄像头,我习惯性使用AForge.NET提供的类库.本 ...
- 快速找到跟踪其他session产生的trc文件
掌握该技术最根本的是需要搞清楚session跟踪文件存放的路径和生成跟踪文件的命名规则,不然,在已经存在成全上万trc文件的生产环境中,要想快速正确的找到跟踪其他SESSION产生的trc文件就如大海 ...
- VC++ 网络编程总结(二)
2.基本的Windows Socket API编程 需要在程序中添加下面的包含语句:#include <winsock2.h> #pragma comment( lib, " ...
- Background Worker Component
http://www.delphiarea.com/products/delphi-components/backgroundworker/ Background Worker Component ( ...
- Class hierarchy of UIResponder as well as subclasses of UIView and UIControl
When you were dragging in your label and your button to this view, you were adding them as subviews. ...
- Codeforces Gym 100015H Hidden Code 暴力
Hidden Code 题目连接: http://codeforces.com/gym/100015/attachments Description It's time to put your hac ...
- jquery easyui from 表单返回乱码!
如果用easyui的form进行提交,必须在<form>标签中加入属性method="post",即<form method="post"&g ...