沈逸老师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 1410 Intersection(判断线段交和点在矩形内)
Intersection Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9996 Accepted: 2632 Desc ...
- [iOS微博项目 - 2.6] - 获取微博数据
github: https://github.com/hellovoidworld/HVWWeibo A.新浪获取微博API 1.读取微博API 2.“statuses/home_time ...
- HDU 4667 Building Fence
题意: 给n个圆和m个三角形,且保证互不相交,用一个篱笆把他们围起来,求最短的周长是多少. 做法:--水过... 把一个圆均匀的切割成500个点,然后求凸包. 注意:求完凸包,在求周长的时候记得要把圆 ...
- Codeforces 707 E. Garlands (二维树状数组)
题目链接:http://codeforces.com/problemset/problem/707/E 给你nxm的网格,有k条链,每条链上有len个节点,每个节点有一个值. 有q个操作,操作ask问 ...
- 使用VS2013调试FluorineFx程序
VS2013,建立 FluorineFx Web 项目方法: 先新建.项目.Web.选择.NET 3.5 ASP.NET 窗体程序来新建一个项目.复制 log.Templates.WEB-INF 文件 ...
- Android导入自定义的jar包时出现 E/AndroidRuntime(486): java.lang.NoClassDefFoundError错误
把自定义的jar包放在Android的工程的libs目录下,运行程序,会出现一下错误: 10-10 08:34:06.479: E/dalvikvm(486): Could not find clas ...
- 未能加载文件或程序集"System.Data,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"或它的某一个依赖项。系统找不到指定的文件。
sqlserver 2005打开出现无法正常访问数据,提示信息: 未能加载文件或程序集"System.Data,Version=2.0.0.0,Culture=neutral,PublicK ...
- 给Oracle锁住的行解锁
1.找出数据库的serial#,以备杀死: select t2.username,t2.sid,t2.serial#,t2.logon_time from v$locked_object t1,v$s ...
- 从UnitedStack OS 1.0 Preview试用申请问卷调查学习OpenStack
http://www.diaochapai.com/survey/ 您的角色最可能是? * (必填, 多选) OpenStack私有云用户,希望能将OpenStack/UOS用于公司内部私有云 云计算 ...
- TMS3705A PCF7991AT 线路图