沈逸老师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 ...
随机推荐
- usb库文件usb_desc.c分析
参考<圈圈教你玩USB> usb协议中使用的是小端结构,所以实际数据在传输时是低字节在先的. 设备描述符的实现: 已知每个设备都必须有且仅有一个设备描述符,它的结构在USB协议中有详细的定 ...
- 利用预渲染加速iOS设备的图像显示
最近在做一个UITableView的例子,发现滚动时的性能还不错.但来回滚动时,第一次显示的图像不如再次显示的图像流畅,出现前会有稍许的停顿感.于是我猜想显示过的图像肯定是被缓存起来了,查了下文档后发 ...
- circle area
circle area Github 链接:传送门 本次作业要求 Create a program that asks for the radius of a circle and prints th ...
- GWT工程架构分析与理解
上一篇文章中介绍了GWT技术的一些理论性的东西,涉及到GWT得一些技术原理及实现.接下来笔者将通过创建一个GWT工程去理解分析GWT工程架构. GWT工程架构解析 笔者使用的是Eclipse插 ...
- Android - 应用名称设置的问题
今天我想修改我的android应用名称,就是手机桌面上图标下面的名称,根据我的理解我修改AndroidManifest.xml文件中application标签中的android:label=" ...
- iOS获取文件和文件夹大小
//通常用于删除缓存的时,计算缓存大小 //单个文件的大小 - (long long) fileSizeAtPath:(NSString*) filePath{ NSFileManager* mana ...
- css 关于两栏布局,左边固定,右边自适应
好几个星期都没写博客了,最近不忙也不闲,稀里糊涂过了两个星期,之前几个月内天天坚持签到.最近也没签到.哈哈,说正事. 今天做东钿互金平台后台页面,昨天做了一个登录页面,业偶碰到了一个难题.等下也要把它 ...
- Linux 卸载Oracle 11G
卸载oracle11G数据 1.使用SQL*PLUS停止数据库[oracle@OracleTest oracle]$ sqlplus /nologSQL> connect / as sysdba ...
- [CentOS]CentOS/RedHat/Fedora的Proxy设定(yum,wget,,rpm)
yum 「/etc/yum.conf」 proxy=http://proxy.xxx.com:8080/ wget 「/etc/wgetrc」 http_proxy=http://proxy.xxx. ...
- EntityFramework Code First 优化-IIS 8的第一次优化请求配置
首先需要在Window中添加Application Initialization Application Initialization 在IIS中配置Application Pool 编辑Applic ...