zend学习笔记.docx

上传人:b****4 文档编号:3769513 上传时间:2022-11-25 格式:DOCX 页数:15 大小:24.26KB
下载 相关 举报
zend学习笔记.docx_第1页
第1页 / 共15页
zend学习笔记.docx_第2页
第2页 / 共15页
zend学习笔记.docx_第3页
第3页 / 共15页
zend学习笔记.docx_第4页
第4页 / 共15页
zend学习笔记.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

zend学习笔记.docx

《zend学习笔记.docx》由会员分享,可在线阅读,更多相关《zend学习笔记.docx(15页珍藏版)》请在冰豆网上搜索。

zend学习笔记.docx

zend学习笔记

路由规则:

路由是一个过程,在这个过程中它去除URI的端点(跟着基本URL的URI部分),并将其分解成参数来决定哪个模块、哪个控制器和哪个动作应该接受请求。

模块、控制器、动作、及其参数被打包到Zend_Controller_Request_Http对象。

使用路由器

为了正确使用路由器,必须对其进行初始化操作。

创建路由器可以通过前端控制器实例的getRouter()方法来实现。

该方法不需要任何参数,执行该方法可以返回一个

Zend_Controller_Router_Rewrite对象。

创建路由器之后,需要添加一些用户定义的路由,该操作可以通过Zend_Controller_Router_Rewrite对象的addRoute()方法来实现。

代码:

php

/**

演示创建路由器的过程

*/

require_once'Zend/Controller/Front.php';

//引用Zend_Controller_Front.php

$ctrl=Zend_Controller_Front:

:

getInstance();

//创建一个前端控制器

$router=$ctrl->getRouter();

//返回一个默认路由,前端控制器功能很强大啊

$router->addRoute('user',newZend_Controller_Router_Route('user/:

username',array('controller'=>'user','action'=>'info')));

4种基本路由

1.缺省路由

定义:

缺省路由是存储在RewriteRouter中名为‘default’的简单Zend_Controller_Router_Route_Module对象。

2.标准框架路由

定义:

Zend_Controller_Router_Route是标准的框架路由。

php

//定义标准框架路由

$route=newZend_Controller_Router_Route('author/:

username',

array(

'controller'=>'profile',

'action'=>'userinfo'

));

//向路由器中添加定义的路由

$router->addRoute('user',$route);

3.静态路由

定义:

特定的路由被设定成型Zend_Controller_Router_Route_Static。

php

//定义静态路由

$route=newZend_Controller_Router_Route_Static(

'login',

array(

'controller'=>'auth',

'action'=>'login'

));

//向路由器中添加定义的路由

$router->addRoute('login',$route);

4.正则表达式路由

Zend_Controller_Router_Route_Regex

php

//正则表达式路由

$route=newZend_Controller_Router_Route_Regex(

'archive/(\d+)',

array(

'controller'=>'archive',

'action'=>'show'

));

//向路由器中添加定义的路由

$router->addRoute('archive',$route);

页面头部的设置

Html:

Php:

header("Content-type:

text/html;charset=utf-8");

 

Zendframework跳转试图重定向的三种方法。

zendframework重定向的方法有三种。

render,forward,redirect。

1.render是用来调视图用的,不会调用ACTION内部代码

1$this->render('upload');

这句话的意思是{当前Module}/{当前Controller(action)}/upload.phtml

2.forward的写法比较灵活。

2$this->_forward('upload');

这句话的意思是{当前Module}/{当前Controller}/upload

3$this->_forward('upload','index');

这句话的意思是{当前Module}/index/upload

4$this->_forward('upload','index','admin');

这句话的意思是admin/index/upload

forward还可以传参

[php]viewplain

5$params=array(

6'a'=>'1',

7'b'=>'2'

8);

9$this->_forward('upload','index','admin',$params);

这句话的意思是admin/index/upload/a/1/b/2

 

3.redirect写法比较简单,方法中填写跳转路径就行了,要从module开始写。

10$this->_redirect('/admin');

这句话的意思是/admin

$this->_redirect('/admin/index');

这句话的意思是/admin/index

11$this->_redirect('/admin/index/upload');

这句话的意思是/admin/index/upload

如果redirect想要传参怎么办呢?

那就只能也写在链接里了。

如下

12$this->_redirect('/admin/index/upload/a/1/b/2');

这句话的意思是/admin/index/upload/a/1/b/2

Zend路径问题

D:

\Zend\my120\publicdirname(__FILE__)//打印文件路径

D:

\Zend\my120\public/../storagedirname(__FILE__).'/../storage';//打印连接后的文件路径

D:

\Zend\my120\applicationrealpath(dirname(__FILE__).'/../application');//打印经过转换的文件路径

首先

我们来看这个全局变量:

__FILE__

它表示文件的完整路径(当然包括文件名在内)

也就是说它根据你文件所在的目录不同,有着不同的值;当然,当它用在包行文件中的时候,它的值是包含的路径;

然后:

我们看这个函数:

stringdirname(stringpath)

它是PHP内置函数,它的作用是什么呢,就是返回除了本文件名以外的所在目录,给你举个例子

假如你的首页中用到了_FILE_这个变量:

(假设你的网页所在目录为:

http:

//localhost/web/index.php),那么:

_FILE_的值为http:

//localhost/web/index.php(一个绝对路径)。

而此时dirname(_FILE_)表示的就是http:

//localhost/web/也就是没有index.php这个文件名。

而dirname(dirname(_FILE_))表示的就是上一级的目录,以此类推;

最后

看一下define()这个函数,其实他就是一个定义常量的函数,比如:

define('MEN','ooooo');

那么你后你就可以用MEN来表示ooooo这个字符串;

如果你学过C语言,你就很清楚,其中也有一个类似的#defineMEN"ooooo";(其实应该说哦php和C类似,因为php就是c编写的);

那么这么写有什么好处呢,那就是当你需要修改变量的时候,你只要修改它就行了,相当的方便,尤其是像路径这样的字符串!

酒后给你解释一下你这段代码:

define('__TYPECHO_ROOT_DIR__',dirname(__FILE__));

就是定义__TYPECHO_ROOT_DIR__为这个文件所在的目录,像这种定义一般是放在config.inc.php中的,那么获取的目录也就是config.inc.php所在的目录;也就是根目录!

define('__TYPECHO_PLUGIN_DIR__','/usr/plugins');这就不要我说了吧!

至于set_include_path(get_include_path().PATH_SEPARATOR.$path);是什么意思,我想没有你想得那么复杂:

他就是包含路径;

比如你有一个文件夹:

命名为include,里面有

数据库连接文件:

conn.php……,

你这样设置:

set_include_path("/include")

那么以后你就直接可以在其他页面中使用

include("conn.php")

这不是经常见到吗?

它参数就字符串,当然你也可以设置多个路径,中间用;分开,

而你那句:

set_include_path(get_include_path().PATH_SEPARATOR.

__TYPECHO_ROOT_DIR__.'/var'.PATH_SEPARATOR.

__TYPECHO_ROOT_DIR__.__TYPECHO_PLUGIN_DIR__);

什意思呢,举个例子:

你的一个页面有这样的语句:

include('/inc/sql.php');

include('/inc/conn.php');

;

;

而你突然发现我把这些要包含的文件放在inc目录下不安全,怎么办,要改,我想放到include目录中,好的,这么多页面不累死才怪:

有没有好的方法!

有!

我在config.inc.php中写着么一句:

set_include_path(get_include_path().'/include')就这么简单,对,就这么简单!

动态的修改!

你不要看这个:

get_include_path().PATH_SEPARATOR.$path这是什么,他就一路径字符串,中间的.是字符串连接符号,也就是你刚才定义的那些常量的组合,组合成一字符串,我想你一定时认为是没见过的参数!

一个很简单的函数,没什么多的解释!

也好就是说他可以动态的设置包含路径!

如果正确返回包含路径,不正确返回false;

 

php类中双冒号的应用及和->的区别

classTest{

publicstatic$var1=“staticvariable1";

public$var2="objectproperty2";

publicfunctiona(){echo"methoda";}

publicstaticfunctionb(){echo"staticmethodb";}

}

类里的静态属性和function调用时是不需要先declare的,直接用双冒号

echoTest:

:

var1;

Test:

:

b();

非静态的必须要在类被declare的情况下才能被引用,是用->

$o_test=newTest;

echo$o_test->var2;

$o_test->a();

就是为了区分对象的方法和属性,和是访问类的静态方法和静态变量,类的静态方法和静态变量是类公用的,不需要实例化也能访问,而对象的方法和属性是每个对象特有的,因此必须先实例化。

其他语言如C++,JAVA等也是一样的(当然它们提供的访问符号可能不一样)

双冒号一般是用在静态方法、静态变量的调用,此时类不需要实例化。

而是用箭头操作符->时,必须要将类进行实例化(或者在类的内部调用也可以。

双冒号(:

:

)是位置访问符号。

并不仅仅是指静态方法和变量。

而是意味着调用冒号得左边这一坨调用冒号的右边这一坨。

这样一个含义。

so。

左边不能写$self。

因为$self先解析,除非前面就定义了$self这个变量是指向自己的。

在php最新版本中。

双冒号就是完全遵循这个作用得用法了。

可以取代->调用对象得变量。

因为是位置指示符嘛。

->是访问对象的方法和属性,:

:

是访问类的静态方法和静态变量

 

绝对路径和相对路径

在HTML里只要涉及文件的地方(如超级链接、图片等)就会涉及绝对路径与相对路径的概念。

1.绝对路径

绝对路径是指文件在硬盘上真正存在的路径。

例如“bg.jpg”这个图片是存放在硬盘的“E:

\book\网页布局代码\第2章”目录下,那么“bg.jpg”这个图片的绝对路径就是“E:

\book\网页布\代码\第2章\bg.jpg"。

那么如果要使用绝对路径指定网页的背景图片就应该使用以下语句:

\book\网页布局\代码\第2章\bg.jpg">

2.使用绝对路径的缺点

事实上,在网页编程时,很少会使用绝对路径,如果使用“E:

\book\网页布\代码\第2章\bg.jpg”来指定背景图片的位置,在自己的计算机上浏览可能会一切正常,但是上传到Web服务器上浏览就很有可能不会显示图片了。

因为上传到Web服务器上时,可能整个网站并没有放在Web服务器的E盘,有可能是D盘或H盘。

即使放在Web服务器的E盘里,Web服务器的E盘里也不一定会存在“E:

\book\网页布局\代码\第2章”这个目录,因此在浏览网页时是不会显示图片的。

3.相对路径

为了避免这种隋况发生,通常在网页里指定文件时,都会选择使用相对路径。

所谓相对路径,就是相对于自己的目标文件位置。

例如上面的例子,“s1.htm”文件里引用了“bg.jpg”图片,由于“bg.jpg”图片相对于“s1.htm”来说,是在同一个目录的,那么要在“s1.htm”文件里使用以下代码后,只要这两个文件的相对位置没有变(也就是说还是在同一个目录内),那么无论上传到Web服务器的哪个位置,在浏览器里都能正确地显示图片。

再举一个例子,假设“s1.htm”文件所在目录为“E:

\book\网页布局\代码\第2章”,而“bg.jpg”图片所在目录为“E:

\book\网页布局\代码\第2章\img”,那么“bg.jpg”图片相对于“s1.htm”文件来说,是在其所在目录的“img”子目录里,则引用图片的语句应该为:

注意:

相对路径使用“/”字符作为目录的分隔字符,而绝对路径可以使用“\”或“/”字符作为目录的分隔字符。

由于“img”目录是“第2章”目录下的子目录,因此在“img”前不用再加上“/”字符。

在相对路径里常使用“../”来表示上一级目录。

如果有多个上一级目录,可以使用多个“../”,例如““s1.htm”文件所在目录为“E:

\book\网页布局\代码\第2章”,而“bg.jpg”图片所在目录为“E:

\book\网页布局\代码”,那么“bg.jpg”图片相对于“s1.htm”文件来说,是在其所在目录的上级目录里,则引用图片的语句应该为:

再举一个例子,假设“s1.htm”文件所在目录为“E:

\book\网页布局\代码\第2章”,而“bg.jpg”图片所在目录为“E:

\book\网页布局\代码\img”,那么“bg.jpg”图片相对于“s1.htm”文件来说,是在其所在目录的上级目录里的“img”子目录里,则引用图片的语句应该为:

4.相对虚拟目录

有关相对路径还有一个比较特殊的表示:

“相对虚拟目录”。

请看下面的例子:

在这个例子里,background属性的值为“/img/bg.jpg”,注意在“img”前有一个“/”字符。

这个“/”代表的是虚拟目录的根目录.假设把“E:

\book\网页布局\代码”设为虚拟目录,那么“/img/bg.jpg”的真实路径为“E:

\book\网页布局\代码\img\bg.jpg”;如果把“E:

\book\网页布局\代码\第2章”设为虚拟目录,那么“/img/bg.jpg”的真实路径为“E:

\book\网页布局\代码\第2章\img\bg.jpg”

Zend中model的使用

接下来讲讲Zend中的model。

其实Zend中的Model处理是相当简单的。

这主要得益于autoload功能。

不像其它框架,为model定义复杂的基类。

如果要定义model,不得不要继承一个model的基类,才可以使用具体的功能。

Zend中并没有对模型进行封装。

原因大概是Model主要是和具体业务逻辑相关的,进行过多的封装,只会画蛇添足。

Zend使用了autoload和namespace功能,很委婉的解决了这个问题。

php的public、protected、private三种访问控制模式的区别

public:

公有类型

在子类中可以通过self:

:

var调用public方法或属性,parent:

:

method调用父类方法

    在实例中可以能过$obj->var来调用 public类型的方法或属性

protected:

受保护类型在子类中可以通过self:

:

var调用protected方法或属性,parent:

:

method调用父类方法

在实例中不能通过$obj->var来调用protected类型的方法或属性

private:

私有类型该类型的属性或方法只能在该类中使用,在该类的实例、子类中、子类的实例中都不能调用私有类型的属性和方法

2.self和 parent的区别

a).在子类中常用到这两个对像。

他们的主要区别在于self可以调用父类中的公有或受保护的属性,但parent不可以调用

b).self:

:

它表示当前类的静态成员(方法和属性) 与$this 不同,$this是指当前对像

public表示全局,类内部外部子类都可以访问;

private表示私有的,只有本类内部可以使用;

protected表示受保护的,只有本类或子类或父类中可以访问;

//父类

classfather{

publicfunctiona(){

echo"functiona";

}

privatefunctionb(){

echo"functionb";

}

protectedfunctionc(){

echo"functionc";

}

}

//子类

classchildextendsfather{

functiond(){

parent:

:

a();//调用父类的a方法

}

functione(){

parent:

:

c();//调用父类的c方法

}

functionf(){

parent:

:

b();//调用父类的b方法

}

}

$father=newfather();

$father->a();

$father->b();//显示错误外部无法调用私有的方法Calltoprotectedmethodfather:

:

b()

$father->c();//显示错误外部无法调用受保护的方法Calltoprivatemethodfather:

:

c()

$chlid=newchild();

$chlid->d();

$chlid->e();

$chlid->f();//显示错误无法调用父类private的方法Calltoprivatemethodfather:

:

b()

?

>

构造函数

void__construct([mixed$args[,$...]])[2]

PHP5允行开发者在一个类中定义一个方法作为构造函数。

具有构造函数的类会在每次创建对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。

注意:

如果子类中定义了构造函数则不会暗中调用其父类的构造函数。

要执行父类的构造函数,需要在子类的构造函数中调用parent:

:

__construct()。

使用新标准的构造函数:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

php

classBaseClass{

function__construct(){

print"InBaseClassconstructor\n";

}

}

classSubClassextendsBaseClass{

function__construct(){

parent:

:

__construct();

print"InSubClassconstructor\n";

}

}

$obj=newBaseClass();

$obj=newSubClass();

?

>

为了实现向后兼容性,如果PHP5在类中找不到__construct()函数,它就会尝试寻找旧式的构造函数,也就是和类同名的函数。

因此唯一会产生兼容性问题的情况是:

类中已有一个名为__construct()的方法,但它却又不是构造函数。

__FILE__,__CLASS__等魔术变量,及实例

1,__FILE__

文件的完整路径和文件名。

如果用在被包含文件中,则返回被包含的文件名。

自PHP4.0.2起,__FILE__总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。

这个变量,我用的是最多的,估计也是大家用的最多的。

web服务器都会指定一个documentroot的,但是不同的服务器,设置的documentroot有可能是不同的,在这种情况下,把一个网站从一个服务器搬家到另一个服务器,这样就有可能因为路径的不同,造成网站跑不起来。

php

/**

在你的公用的配置文件中,来设置你的根目录,这样就不用担心经常搬家了。

*/

define('ROOT_PATH',dirname(__FILE__).DIRECTORY_SEPARATOR);

echoROOT_PATH;

echo"
";

echo__FILE__;

echo"
";

echodirname(__FILE__);

echo"
";

echodirname(dirname(__FILE__));

?

>

2,__LINE__

文件中的当前行号。

这个变量在调试错误的时候,还是比较有作用的,其他的时候,没什

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1