PHP

PHP核心语法:吸收了其他语言的编写习惯

**PHP标记形式**
(1) <?php?>        //推荐使用
(2) <?...?>
(3) <script language=“php” >…</script>
(4) <%…%>
**数据类型**
标量类型:boolean (布尔型)、integer (整型)float (浮点型, 也称作 double)、string (字符串)
复合类型:array (数组)、object (对象)
特殊类型:resource (资源)、NULL (NULL)
**判断数据类型**
isset():           // 变量是否已经声明
empty():           // 变量是否为空
defined():     // 常量是否已经定义 define()
is_string():       // 检测变量是否是字符串
is_object():       // 检测变量是否是一个对象
is_array():        // 检测变量是否是数组
is_null():         // 检测变量是否为 NULL 值是否是NULL大小写敏感
**常量的定义**
define("COLOR","red");
define("SHAPE","round",TRUE);   //定义常量SHAPE,值为round,不区分名称大小写。
**预定义常量**
PHP_EOL        //一行结束
__FILE__       //存储当前脚本的(物理地址)绝对路径及文件名称
__LINE__       //存储该常量所在行号
__FUNCTION__   //存储该常量所在函数名称
__CLASS__      //存储该常量所在类的名称
PHP_VERSION    //存储当前PHP的版本号
PHP_OS         //存储当前服务器的操作系统
**变量的定义**:$变量名称 = 变量的值
**变量的赋值**
传值赋值:$a = 33;
引用赋值:$b = &$a;
可变变量:$$可变变量的名称 = 可变变量的值
$GLOBALS//存储当前脚本中的所有全局变量,其KEY为变量名,VALUE为变量值
$_SERVER//当前Web服务器变量数组
$_GET//存储以GET方法提交表单中的数据
$_POST//存储以POST方法提交表单中的数据
$_COOKIE//取得或设置用户浏览器Cookies中存储的变量数组
$_FILES//存储上传文件提交到当前脚本的数据
$_ENV//存储当前Web环境变量
$_REQUEST//存储提交表单中的所有请求数组,其中包括$_GET、$_POST、$_COOKIE和$_SESSION中的所有内容
$_SESSION//存储当前脚本的会话变量数组
**输出函数**
echo 可以同时输出多个字符串,可以多个参数,无返回值。
print() 只可以同时输出一个字符串,一个参数,有返回值。
die() 先输出内容,然后退出程序。
printf() 返回输出字符个数,把文字格式化以后输出。
sprintf() 不能直接输出,先赋给一个变量,然后再输出变量。
print_r() 只用于输出数组。
var_dump() 输出变量的容,类型或字符串的内容,类型,长度,常用来调试。
面向对象编程
PHP的对象是用数组来模拟的。而对象和数组的区别在于,对象还有个指针,指向了它所属的类。
#类的本质
<?php
#echo "hello php ";
class Person{
    public $name;
    public $gender;
    public function say(){
        echo $this->name," is ",$this->gender,PHP_EOL;
    }
}
$p1 = new Person();
$p1->name = "lzy";
$p1->gender = "male";
$p1->say();
print_r((array)$p1);
var_dump($p1);
$str = serialize($p1);
echo $str,PHP_EOL;
file_put_contents('store.txt', $str);
$str2 = file_get_contents('store.txt');
$p2 = unserialize($str2);
$p2->say();
?>
#继承
<?php
class car{
    public function addoil(){
        echo "addoil" ,PHP_EOL;
    }
}
class bm extends car{

}
class bc{
    public $car;
    public function __construct(){
        $this->car=new car();
    }
    public function addoil(){
        $this->car->addoil();
    }
}
$bm = new bm();
$bm->addoil();
$bc =new bc();
$bc->addoil();
?>
#多态
<?php
interface car{
    public function addoil();
}
class bm implements car{
    public function addoil(){
        echo '宝马',PHP_EOL;
    }
}
class bc implements car{
    public function addoil(){
        echo '奔驰',PHP_EOL;
    }
}
function doprint(car $i){
    $i->addoil();
}
$bm = new bm();
$bc =new bc();
doprint($bm);
doprint($bc);
?>
#加强型接口 php5.4出现的
<?php
trait car1{
    public function add1oil(){
        echo '奔驰';
    }
}
trait car2{
    public function add2oil(){
        echo '宝马';
    }
}
class Car {
    use car1,car2;
    public function addoil(){
        echo '汽车';
    }
}
$car = new car();
$car->add1oil();
$car->add2oil();
$car->addoil();
?>
语法糖:
__construct、__set、__get、__call、__callStatic、__toString
#语法糖1
<?php
class Person{
    public $name;
    public $gender;
    public function __construct($n,$g){
        $this->name = $n;
        $this->gender = $g;
    }
    public function say(){
        echo $this->name," is ",$this->gender,PHP_EOL;
    }
}
$p1 = new Person("lzy","male");
$p1->say();
?>
#语法糖2
<?php
class Person{
    private $name='lzy';
    public $gender='male';
    public function __set($name,$value){
        $this->$name=$value;
    }
    public function __get($name){
        if(!isset($this->$name)){
            echo '未设置';
        }else{
            return $this->$name;
        }
    }
}
$p = new Person();
echo $p->gender,PHP_EOL;
#echo $p1->name;error
echo $p->name,PHP_EOL;
$p->name = 'lzy124';
echo $p->name,PHP_EOL;
echo $p->nameS,PHP_EOL;
?>
#反射
<?php
class Person {          
    protected $name='lzy'; 
    protected $gender='male';  
    public function say(){
        echo 'hi';
    }       
}  
$class = new ReflectionClass('Person');
$instance  = $class->newInstanceArgs();
$properties = $class->getProperties();  
foreach($properties as $property) {  
    echo $property->getName()."\n";  
} 
$ec=$class->getmethod('say');  //获取Person 类中的getName方法  
$ec->invoke($instance); 
?>
#异常与错误处理
<?php
try {  
    $error = 'Always throw this error';  
    throw new Exception($error);   
    echo 'Never executed',PHP_EOL;  

} catch (Exception $e) {  
    echo 'Caught exception: ',  $e->getMessage(),PHP_EOL;  
}    
echo 'Hello World',PHP_EOL; 


function customError($errno, $errstr){ 
    echo "Error: [$errno] $errstr",PHP_EOL;
 }
set_error_handler("customError");
echo($test);
trigger_error("Value must be 0");
echo 'Hello World too',PHP_EOL; 
?>

php.ini开启curl,mysql模块

curl:extension=php_curl.dll;extension_dir[dll文件路径]
php_curl.dll依赖ssleay32.dll和libeay32.dll

搭建PHP开发环境
WampServer:(Apache[httpd.conf]+PHP[php.ini]+MySQL[mysql.ini])
卸载进入每个程序对应目录下的bin文件目录,分别按照下面方式执行即可。
apache卸载 : httpd -k uninstall
mysql卸载 :mysqld -remove

ThinkPHP 3 介绍及安装
一、ThinkPHP的介绍
MVC
M - Model 模型 工作:负责数据的操作
V - View 视图(模板) 工作:负责前台页面显示
C - Controller 控制器(模块) 工作:描述功能
框架
二、ThinkPHP的获取 http://www.thinkphp.cn
三、ThinkPHP核心文件介绍
├─ThinkPHP.php 框架入口文件
├─Common 框架公共文件
├─Conf 框架配置文件
├─Extend 框架扩展目录
├─Lang 核心语言包目录
├─Lib 核心类库目录
│ ├─Behavior 核心行为类库
│ ├─Core 核心基类库
│ ├─Driver 内置驱动
│ │ ├─Cache 内置缓存驱动
│ │ ├─Db 内置数据库驱动
│ │ ├─TagLib 内置标签驱动
│ │ └─Template 内置模板引擎驱动
│ └─Template 内置模板引擎
└─Tpl 系统模板目录
四、实验环境搭建
五、项目搭建
#项目目录结构及说明:
Home 前台应用文件夹
├─Common 项目公共文件目录
├─Conf 项目配置目录
├─Lang 项目语言目录
├─Lib 项目类库目录
│ ├─Action Action类库目录
│ ├─Behavior 行为类库目录
│ ├─Model 模型类库目录
│ └─Widget Widget类库目录
├─Runtime 项目运行时目录
│ ├─Cache 模板缓存目录
│ ├─Data 数据缓存目录
│ ├─Logs 日志文件目录
│ └─Temp 临时缓存目录
└─Tpl 项目模板目录

MVC模式和URL访问

一、什么是MVC
M -Model 编写model类 对数据进行操作
V -View 编写html文件,页面呈现
C -Controller 编写类文件(UserAction.class.php)
二、ThinkPHP的MVC特点
三、ThinkPHP的MVC对应的目录
M 项目目录/应用目录/Lib/Model
V 项目目录/应用目录/Tpl
C 项目目录/应用目录/Lib/Action
四、url访问C
五、url的4种访问方式
1.PATHINFO 模式
http://域名/项目名/入口文件/模块名/方法名/键1/值1/键2/值2
2.普通模式
http://域名/项目名/入口文件?m=模块名&a=方法名&键1=值1&键2=值2
3.REWRITE模式
http://域名/项目名/模块名/方法名/键1/值1/键2/值2
4.兼容模式
http://域名/项目名/入口文件?s=模块名/方法名/键1/值1/键2/值2

输出和模型使用
一、输出
a、通过 echo 等PHP原生的输出方式在页面中输出
b、通过display方法输出 想分配变量可以使用assign方法
c、show方法
d、修改左右定界符
需要修改配置文件中的配置项
‘TMPL_L_DELIM’=>’<{‘, //修改左定界符
‘TMPL_R_DELIM’=>’}>’, //修改右定界符
二、模型使用

需要在方法中通过new Model(表名)的形式操作数据库
    $m=new Model('User');
    $arr=$m->select(); 
    'DB_TYPE'=>'mysql',   //设置数据库类型
    'DB_HOST'=>'localhost',//设置主机
    'DB_NAME'=>'thinkphp',//设置数据库名
    'DB_USER'=>'root',    //设置用户名
    'DB_PWD'=>'',        //设置密码
    'DB_PORT'=>'3306',   //设置端口号
    'DB_PREFIX'=>'tp_',  //设置表前缀
    也可以使用DSN方法进行配置
$m=M('User','t_','mysql://user:lzy@localhost:3306/tp');
M方法有三个参数,第一个参数是模型名称(可以包括基础模型类和数据库),第二个参数用于设置数据表的前缀(留空则取当前项目配置的表前缀),第三个参数用于设置当前使用的数据库连接信息(留空则取当前项目配置的数据库连接信息)。
M() 等效为 new Model();
$m=M('User');
$arr=$m->select();
使用模型的实例可以对数据进行操作,操作的工作一般就是对数据库进行 增删改查 CURD
增 -C Create $m->add()
删 -D Delete $m->delete()
改 -U Update $m->save()
查 -R Read   $m->select()

三、补充
a、模板可以遍历数组

<volist name='data' id='vo'>
            <{$vo.id}>----<{$vo.username}>-----<{$vo.sex}>
</volist>

b、我们可以开启调试功能中的page_trace
1.开启调试功能 define(‘APP_DEBUG’,true);
2.我们需要设置配置文件 ‘SHOW_PAGE_TRACE’=>true,

CURD特性
一、CURD介绍
二、读取数据

对数据的读取 Read
$m=M('User');
select
$m->select();//获取所有数据,以数组形式返回
find
$m->find($id);//获取单条数据
getField(字段名)//获取一个具体的字段值
$arr=$m->where('id=2')->getField('username');

三、 创建数据

对数据的添加 Create
$m=M('User');
$m->字段名=$m->add();//返回值是新增的id号

四、删除数据

$m=M('User');
$m->delete(2);               //删除id为2的数据
$m->where('id=2')->delete(); //与上面效果相同,也是删除id为2的数据,返回值是受影响行数。

五、更新数据

$m=M('User');
$data['id']=1;
$data['username']='ztz2';
$m->save($data);             //返回值是受影响行数

查询方式

一、普通查询方式
    a、字符串
    $arr=$m->where("sex=0 and username='gege'")->find();
    b、数组
    $data['sex']=0;
    $data['username']='gege';
    $arr=$m->where($data)->find();//注意:这种方式默认是and的关系,如果使用or关系,需要添加数组值
    $data['sex']=0;
    $data['username']='gege';
    $data['_logic']='or';
二、表达式查询方式
    $data['id']=array('lt',6);
    $arr=$m->where($data)->select();
    EQ 等于/NEQ不等于/GT 大于/EGT大于等于/LT 小于/ELT小于等于
    LIKE 模糊查询
        $data['username']=array('like','%ge');
        $arr=$m->where($data)->select();
    NOTLIKE
        $data['username']=array('notlike','%ge%'); 
        $arr=$m->where($data)->select();
        注意:如果一个字段要匹配多个通配符
    $data['username']=array('like',array('%ge%','%2%','%五%'),'and');//如果没有第三个值,默认关系是or关系
        $arr=$m->where($data)->select();
    BETWEEN
        $data['id']=array('between',array(5,7));
        $arr=$m->where($data)->select();
        //SELECT * FROM `tp_user` WHERE ( (`id` BETWEEN 5 AND 7 ) )
        $data['id']=array('not between',array(5,7));//注意,not 和 between中间一定要有空格
        $arr=$m->where($data)->select();
    IN
        $data['id']=array('in',array(4,6,7));
        $arr=$m->where($data)->select();
        //SELECT * FROM `tp_user` WHERE ( `id` IN (4,6,7) )
        $data['id']=array('not in',array(4,6,7));
        $arr=$m->where($data)->select();
        //SELECT * FROM `tp_user` WHERE ( `id` NOT IN (4,6,7) )
三、区间查询
    $data['id']=array(array('gt',4),array('lt',10));//默认关系是 and 的关系
    //SELECT * FROM `tp_user` WHERE ( (`id` > 4) AND (`id` < 10) ) 
        $data['id']=array(array('gt',4),array('lt',10),'or') //关系就是or的关系
    $data['name']=array(array('like','%2%'),array('like','%五%'),'gege','or');
四、统计查询
count //获取个数、max   //获取最大数、min   //获取最小数
avg   //获取平均数、sum   //获取总和
五、SQL直接查询
a、query 主要数处理读取数据的
成功返回数据的结果集,失败返回boolean false
$m=M();
$result=$m->query("select *  from t_user where id >50");
var_dump($result);
b、execute 用于更新个写入操作
成功返回影响行数,失败返回boolean false
$m=M();
$result=$m->execute("insert into t_user(`username`) values('ztz3')");
var_dump($result);

连贯操作
一、常用连贯操作

1.where帮助我们设置查询条件
2.order对结果进行排序
$arr=$m->order('id desc')->select();
$arr=$m->order(array('id'=>'desc','sex'=>'asc'))->select();
3.limit 限制结果
limit(2,5)
limit('2,5')
limit(10)//limit(0,10)
4.field 设置查询字段
field('username as name,id')
field(array('username'=>'name','id')
field('id',true) //获取除了id以外的所有字段
5.table 
6.group 
7.having

二、补充
alias 用于给当前数据表定义别名 字符串
page 用于查询分页(内部会转换成limit) 字符串和数字
join* 用于对查询的join支持 字符串和数组
union* 用于对查询的union支持 字符串、数组和对象
distinct 用于查询的distinct支持 布尔值
lock 用于数据库的锁机制 布尔值
cache 用于查询缓存 支持多个参数(以后在缓存部分再详细描述)
relation 用于关联查询(需要关联模型扩展支持) 字符串
validate 用于数据自动验证 数组
auto 用于数据自动完成 数组
filter 用于数据过滤 字符串
scope* 用于命名范围 字符串、数组

视图
一、模板的使用
a、规则
模板文件夹下[TPL]/[分组文件夹/][模板主题文件夹/]和模块名同名的文件夹[Index]/和方法名同名的文件[index].html(.tpl)
更换模板文件的后缀名(修改配置文件)
‘TMPL_TEMPLATE_SUFFIX’=>’.html’,//更改模板文件后缀名
b、修改模板文件目录层次
‘TMPL_FILE_DEPR’=>’_’,//修改模板文件目录层次
c、模板主题
‘DEFAULT_THEME’=>’your’,//设置默认模板主题
需要在TPL下面新建一个your文件夹作为模板主题文件夹
如何动态修改模板主题?
1、在后台准备一个功能,修改config.php文件中的默认模板项
2、通过url传递 t=主题 参数可以修改不同的模板
‘DEFAULT_THEME’=>’your’,//设置默认模板主题
‘TMPL_DETECT_THEME’=>true,//自动侦测模板主题
‘THEME_LIST’=>’your,my’,//支持的模板主题列表
二、输出模板内容

a、display
1.display中没有参数 $this->display();
2.可以带参数
$this->display(本模块文件夹下的其他模板文件);
$this->display('index2');
$this->display(其他文件夹下的模板文件);
$this->display('Public:error');//注意,仅仅需要在Tpl下有Public文件夹以及其中的error.html即可,不需要一定有Public模块
$this->display(其他主题下的文件夹下的模板文件);//需要开启主题支持
$this->display('my:Index:index');
$this->display(一个url路径);
$this->display('./Public/error.html');
$this->display('./Public/error.html','utf-8','text/xml');
$this->show($content);
3.fetch方法//获得模板文件中的内容,以字符串形式返回
$content=$this->fetch('Public:error');
4.show方法//不需要模板文件,可以直接输出模板内容
$content=$this->fetch('Public:error');
dump($content);
$content=str_replace('h1','i',$content);
$this->show($content);

三、模板中的赋值

//$this->assign('name','赵桐正');
$this->name='赵桐正2';
$this->display();

四、模板替换
PUBLIC:会被替换成当前网站的公共目录 通常是 /Public/
ROOT: 会替换成当前网站的地址(不含域名)
APP: 会替换成当前项目的URL地址 (不含域名)
GROUP:会替换成当前分组的URL地址 (不含域名)
URL: 会替换成当前模块的URL地址(不含域名)
ACTION:会替换成当前操作的URL地址 (不含域名)
SELF: 会替换成当前的页面URL
更换模板变量规则,修改配置项
‘TMPL_PARSE_STRING’=>array( //添加自己的模板变量规则
CSS‘=>ROOT.’/Public/Css’,
JS‘=>ROOT.’/Public/Js’,
),

模板中的变量

一、变量输出        
        1.标量输出
        2.数组输出
                {$name[1]}
                {$name['k2']}
                {$name.k1}
        3.对象输出
                {$name:k}
                {$name->k}
二、系统变量
        {$Think.get.id}
三、使用函数
        {$name|strtoupper} 生成的编译后文件是 <?php echo (strtoupper($name)); ?>
        {$name|date='Y m d H:i:s',###}
四、默认值
        {$name|default='这里是默认值'}
五、运算符
        + - * / % ++ --
        {$name++}

模板中的基本语法

一、导入CSS和JS文件       
    1、css link/js  scr
    <link rel='stylesheet' type='text/css' href='__PUBLIC__/Css/test.css'/>
    <script src='__PUBLIC__/Js/test.js'></script>
    2.import
    <import type='js' file='Js.test' /> //导入Public文件夹下面的Js目录中的test.js文件,import标签可以省略type属性,默认就是js的
    <import type='css' file='Css.test' />//可以更改默认文件夹 设置basepath属性
    <import type='js' file='Js.my' basepath='./Other'/>
    3.load//方法可以自动检测导入的文件类型
    <load href='__PUBLIC__/Js/test.js' />
二、分支结构
    1、if    
        <if condition='$sex eq "男"'>
            男人是泥巴做的
            <else />
            女人是水做的
        </if>
        <if condition='$age lt 18'>
            未成年
            <elseif  condition='$age eq 18'/>
            青春年少
            <else />
            成年
        </if>
    >gt、<lt、==eq、<=elt、>=egt、!=neq、===heq、!==nheq
        <switch name='number'>
            <case value='1'>一个和尚挑水吃</case>
            <case value='2'>两个和尚台水吃</case>
            <case value='3'>三个和尚没水吃</case>
            <default/> 这里是默认值
        </switch>
三、循环结构
    1.for
        <table border='1' width='500'>
            <for start='10' end='00' name='j' step='-2' comparison='gt'>
                <tr><td>{$j}</td><td>abc</td></tr>
            </for>
        </table>
    2.volist
        <volist name='list' id='v'>
            {$v.username}<br/>
        </volist>
    3.foreach
        <foreach name='list' item='v' key='k'>
            {$k}-------{$v}<br/>
        </foreach>
四、特殊标签
1、比较标签
eq或者  等于 、neq 或者notequal 不等于、gt 大于 、lt 小于
egt 大于等于  、elt 小于等于、heq 恒等于、nheq 不恒等于 
2.范围标签
in      
<in name='n' value='9,10,11,12'>在这些数字里面<else/>不在这些数字的范围内</in>
<notin name='n' value='9,10,11,12'>在这些数字里面<else/>不在这些数字的范围内</in>
between
<notbetween name='n' value='1,10'>{$n}在1-10之间<else/>{$n}不在1到10之间</between>
3.present//标签来判断模板变量是否已经赋值,
<present name='m'>m有赋值<else/>m没有赋值</present>
4.Empty//标签判断模板变量是否为空,
<empty name='n'>n为空赋值<else/>n有值</empty>
5.Defined //判断常量是否已经定义
6.Define//在模板中定义常量
7.Assing//模板中变量赋值                       
五、其他标签使用
1、在模板中直接使用PHP代码
<php> echo "我是赵桐正" </php>
2、建议更改左右定界符//在配置文件中改变
'TMPL_L_DELIM'=>'<{', //修改左定界符
'TMPL_R_DELIM'=>'}>', //修改右定界符

模板的使用技巧

一、模板包含
<include file="完整模板文件名" />
<include file="./Tpl/default/Public/header.html" />
<include file="read" />
<include file="Public:header" />
<include file="blue:User:read" />
<include file="$tplName" />
<include file="header" title="ThinkPHP"keywords="框架"/>
在模板中变量用[变量]接受
<include file='file1,file2' />
二、模板渲染
1、自动开启模板渲染 设置配置文件
'LAYOUT_ON'=>true,//开启模板渲染
准备一个模板渲染页面,在页面中使用{__CONTENT__}接受具体模板页面的内容,如果在摸一个具体模板中不希望使用渲染模板,可以在页首添加{__NOCONTENT__}
2、不开启自动模板渲染可以在每一个具体页面的页首添加
<layout name='layout'/>
3.使用技巧
在渲染模板文件中也可以使用其他模板文件的内容
<include file='Public:header'/>
        <body>
            <p>这里是渲染页面!!!</p>
            {__CONTENT__}
        </body>
三、模板的继承 

控制器的模块和操作

一、空模块和空操作
1、空操作
        function _empty($name){
            $this->show("$name 不存在 <a href='__APP__/Index/index'>返回首页</a>");
        }
2.空模块
    class EmptyAction extends Action{
        function index(){
            $city=M('City');
            $arr=$city->select();
            $this->assign('list',$arr);
            $name=MODULE_NAME;
            $this->display("City:$name");
        }
    }
二、前置操作和后置操作
1、前置操作: _before_操作名
2、后置操作: _after_操作名

URL

一、URL规则
1、默认是区分大小写的
2、如果我们不想区分大小写可以改配置文件
    'URL_CASE_INSENSITIVE'=>true,//url不区分大小写    
3、如果模块名为 UserGroupAction
    http://localhost/thinkphp4/index.php/user_group/index
4、如果'URL_CASE_INSENSITIVE'=>false
    http://localhost/thinkphp4/index.php/UserGroup/index
二、URL伪静态
    'URL_HTML_SUFFIX'=>'html|shtml|xml',//限制伪静态的后缀
三、URL路由
1、启动路由  要在配置文件中开启路由支持
2、使用路由
2.1.规则表达式配置路由
'my'=>'Index/index'//静态地址路由
':id/:num'=>'Index/index'//动态地址路由
'year/:year/:month/:date'=>'Index/index'//动态和静态混合地址路由
//动态和静态混合地址路由 ,加上 \d代表类型只能是数字
'year/:year\d/:month\d/:date\d'=>'Index/index',
'my/:id$'=>'Index/index',// 加上$说明地址中只能是 my/1000 后面不能有其他内容了
2.2.正则表达式配置路由
        '/^year\/(\d{4})\/(\d{2})\/(\d{2})/'=>'Index/index?year=:1&month=:2&date=:3'
3、注意事项:
3.1.越复杂的路由越往前面放
'URL_ROUTE_RULES'=>array(
        'my/:year/:month:/:day'=>'Index/day',
        'my/:id\d'=>'Index/index',
        'my/:name'=>'Index/index',
        )
3.2.可以使用$作为完全匹配的路由规则
        'URL_ROUTE_RULES'=>array(
                'my/:id\d$'=>'Index/index',
                'my/:name$'=>'Index/index',
                'my/:year/:month:/:day$'=>'Index/day',
            )
3.3.用正则匹配的方式
        'URL_ROUTE_RULES'=>array(
                '/^my\/(\d+)$/'=>'Index/index?id=:1',
                '/^my\/(\w+)$/'=>'Index/indexname=:1', '/^my\/(\d{4})\/(\d{2})\/(\d{2})$/'=>'Index/day?year=:1&month=:2&day=:3',
                )
4、URL重写
5、URL生成

ThinkPHP
1、多应用配置技巧
2、使用分组
3、页面跳转

$this->success('查询成功',U('User/test'));
    $this->redirect('User/test','',5,'页面正在跳');

4、Ajax技巧

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值