200行描述MVC-PHP源码
200行大点,读完kohana总结的一点笔记。
$val) {
$value[$key] = self::sanitize($val);
}
} elseif (is_string($value)) {
if (self::$magic_quotes === TRUE) {
$value = stripslashes($value);
}
if (strpos($value, "\r") !== FALSE) {
$value = str_replace(array("\r\n", "\r"), "\n", $value);
}
}
return $value;
}
public function __set($k,$v)
{
$this->$k = $v;
}
public function __call($method,$arg)
{
echo '错误指定页面';
print_r($arg); //错误指定页面
}
public static function __callStatic($method,$arg)
{
print_r($arg); //错误指定页面 静态的好像不太可能 先写这儿了
}
public function assign($key,$value)
{
$this->data[$key] = $value;
}
//引入模板
public function display($template,$ext = '.html')
{
$template_path = $template.$ext;
if(file_exists($template_path)){
foreach ($this->data as $k=>$v){
$this->__set($k,$v);
}
include $template_path;
}
}
}
//控制器
class IndexAction extends ProductInterface
{
public function index()
{
print_r( $_GET);
//$body = file_get_contents('php://input');
//print_r($body); //结果为 member_id=1234567 enctype="multipart/form-data"
// print_r($_POST); //结果为 Array ( [member_id] => 1234567 )
//$model= new Article('article');
// $arr= $model->select('SELECT * FROM article limit 2');
//print_r($arr);
}
public function admin($array)
{
$model= new Article('article');
$array=array();
$array['rec']='admins';
$array['pos']='李斯';
$array['content']='hellow world';
echo $model->add($array);
}
}
///控制器2
class AdminAction extends ProductInterface
{
public function index($array)
{
echo __method__.'方法';
}
}
class Factory
{
protected static $ins=null;
protected function __construct(){
ob_start(); //打开缓冲区
static::autoLoad();
register_shutdown_function(array('Factory','last')); //程序执行完后执行
}
public static function getIns($url){
if(self::$ins instanceof self ){
self::$ins->execute($url);
}else{
self::$ins = new self();
self::$ins->execute($url);
}
}
protected function set_router($uri) {
/*
$uri='index/admin';
// $route_regex='#^(?:(?P[^/.,;?\n]++)(?:/(?P[^/.,;?\n]++)(?:/(?P[^/.,;?\n]++))?)?)?$#uD';
//$route_regex='#^captcha(?:/(?P[^/.,;?\n]++))?$#uD';
$route_regex='#^(?:(?P[^/.,;?\n]++)(?:/(?P[^/.,;?\n]++)(?:/(?P[^/.,;?\n]++))?)?)?$#uD';
if ( ! preg_match($route_regex, $uri, $matches)) {
echo '没有匹配上';
} else {
print_r($matches);
}
*/
$arr=array();
if (strpos($uri,'?') === false) {
$pathinfo=array();
if (!empty($_SERVER['PATH_INFO'])) {
$arg=trim($_SERVER['PATH_INFO'],'/');
} else if ($request_uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)){
//有效的URL路径发现,设置它。
$arg= trim($request_uri,'/');
}
if(stripos($arg,'/') !== false) {
$pathinfo=explode('/',$arg);
}
$arr['ctrolloer']= isset($pathinfo[0])? $pathinfo[0] : 'index' ;
array_shift($pathinfo);
$arr['action']= isset($pathinfo[0])?$pathinfo[0]:'index' ;
array_shift($pathinfo);
$num=count($pathinfo);
for ($i=0;$iset_router($url);
$_GET = isset($arr['param']) ? $arr['param'] : array();
$ProductType = ucfirst($arr['ctrolloer']).'Action';
if (class_exists($ProductType)) {
$p=new $ProductType();
$p->$arr['action']($arr);
} else {
throw new Exception("Error Processing Request", 1);
}
}
public static function last()// echo '脚本执行完了'. PHP_EOL;
{
$info=ob_get_contents(); //得到缓冲区的内容并且赋值给$info
$file=fopen($_SERVER['DOCUMENT_ROOT'].DIRECTORY_SEPARATOR.'indexs.html','w'); ///打开文件 指定缓存目录
fwrite($file,$info); //写入信息到info.txt
fclose($file); //关闭文件info.txt
//ob_end_clean();
ob_end_flush();
flush();
}
static public function loadFile($className)
{
$dir=array();
$dir[0]=.'/application/'; //指定多个目录
$dir[1]=.'/module/';
$file_arr=self::find_file($dir,$className);
foreach($file_arr as $value){
if(is_file($value) ){
return include_once $value;
}else{
throw new \Exception('找不到'.$className.'类');
}
}
}
public static function find_file($paths=array(),$name)
{
$name=ucfirst($name).'.php';
$found=array();
foreach ($paths as $dir){
if (is_file($dir.$name)){
$found[] = $dir.$name;
}
}
return $found;
}
// 注册自动装载机
static public function autoLoad()
{
spl_autoload_register( array(__CLASS__,'loadFile') );
}
// 注册自动装载机2 //如有必要注册多个自动加载函数
static public function autoLoad2()
{
spl_autoload_register( array(__CLASS__,'loadFile2') );
}
}
abstract class DB{
public $db=NULL;
public $table=NULL;
public $config=array(
'dsn'=>'mysql:dbname=test;host=127.0.0.1',
'user'=>'root',
'password'=>'root',
'charset'=>'utf8',
'persistent'=>false //持久性链接
);
public $options = array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES ",
);
public function __construct($table){
$this->table=$table;
$this->options[PDO::MYSQL_ATTR_INIT_COMMAND] .= $this->config ['charset'];
if($this->config ['persistent']){
$this->options[PDO::ATTR_PERSISTENT] = true;
}
try {
// 长连接,如有需要将array(PDO::ATTR_PERSISTENT=>true) 作为第四个参数
$this->db=$pdo = new \PDO ( $this->config ['dsn'],$this->config ['user'],$this->config ['password'],$this->options);
//$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_SILENT); //不显示错误
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);//显示警告错误,并继续执行
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//产生致命错误,PDOException
//$this->db->exec('set names utf8');
} catch ( \Exception $e ) {
throw new \Exception ( $e->getMessage () );
}
}
public function query($sql){
return $re=$this->db->query($sql);
}
public function select($sql) /*查询*/
{
$re=$this->query($sql);
return $re->fetchAll();
}
public function add($arr=array()){ /*添加*/
$sql = 'insert into ' . $this->table . ' (' . implode(',',array_keys($arr)) . ')';
$sql .= " values ('";
$sql .= implode("','",array_values($arr));
$sql .= "')";
$stmt = $this->db->prepare($sql);
$stmt->execute($arr);
echo $this->db->lastinsertid();
}
public function update($arr,$where = ' where 1 limit 1'){ /*修改*/
//$sql = "UPDATE `user` SET `password`=:password WHERE `user_id`=:userId";
$sql = 'update ' . $this->table .' set ';
foreach($arr as $k=>$v) {
$sql .= $k . "='" . $v ."',";
}
$sql = rtrim($sql,',');
$sql .= $where;
$stmt = $this->db->prepare($sql);
$stmt->execute($arr);
return $stmt->rowCount();
}
public function delete($sql){ /*删除*/
$stmt = $this->db->prepare($sql);
$stmt->execute();
return $stmt->rowCount();
}
}
////可以每一张表一个类 统一继承DB类。。。。。
class Article extends DB{
}
?>
《script》
var x=1,y=z=0;
function add(n){
n=n+1;
}
y=add(x);
function add(n){
n=n+3;
}
z=add(x);
《script》
/php/33375.htmlwww.phpzy.comtrue/php/33375.htmlTechArticle200行描述MVC-PHP源码 200行大点,读完kohana总结的一点笔记。 $val) { $value[$key] = self::sanitize($val); } } elseif (is_string($value)) { if (self::$magic_quotes === TRUE) { $value = stripslashes($value); } if (strpos($val...
PHP之友评论