查看: 1036|回复: 23
|
[PHP][MVC]吐血帖
[复制链接]
|
|
qi因为正在自学MVC,写程序的时候有点confused
我想confirm passing by reference是不是这样的状况
比如说以下的code
……
另外,MVC一定要把工作分得很清楚吗?我快要乱死了,而且因为没有ide在手上,所以追踪起来真得很想死……
[ 本帖最后由 V4ndrake 于 11-5-2007 07:20 AM 编辑 ] |
|
|
|
|
|
|
|
发表于 24-4-2007 08:53 PM
|
显示全部楼层
PHP5已经将assignment调整成自动Reference了,而不是像PHP4复制一个object;
不再是:
$foo = &$bar;
而是:
$foo = $bar;
你的例子有点模糊,可以再清楚一点吗? |
|
|
|
|
|
|
|

楼主 |
发表于 24-4-2007 10:01 PM
|
显示全部楼层
原帖由 苦瓜汤 于 24-4-2007 08:53 PM 发表
PHP5已经将assignment调整成自动Reference了,而不是像PHP4复制一个object;
不再是:
$foo = &$bar;
而是:
$foo = $bar;
你的例子有点模糊,可以再清楚一点吗?
我在实习中涅,而且该server已经在host着一些别的script了,我不想要求去更换php5
PHP5已经有了我知道,可是我还是在php4下工作
我正在慢慢picking up MVC,也已经开始慢慢implement,只是没有人指点,怕自己画虎不成反类犬
暂时出来的skeleton应该是这样的 http://www.coolsilon.com/intern.zip ,你会有时间帮忙看吗?
不过我的final year project也是要用到php5+mysql5,在找着廉价又稳定的空间中 |
|
|
|
|
|
|
|
发表于 25-4-2007 09:40 AM
|
显示全部楼层
原帖由 苦瓜汤 于 24th Apr, 2007 20:53 发表
PHP5已经将assignment调整成自动Reference了,而不是像PHP4复制一个object;
不再是:
$foo = &$bar;
而是:
$foo = $bar;
你的例子有点模糊,可以再清楚一点吗?
若我沒記錯的話,PHP5並沒有如您所說的pass-by-reference,請看下例:
$user1 = "Danny";
$user2 = $user1;
print "User 1 is " . $user1 . "<br>";
print "User 2 is " . $user2 . "<br>";
print "<br>User 1 is changing name...<br>";
$user1 = "Eric";
print "User 1 is " . $user1 . "<br>";
print "User 2 is " . $user2 . "<br>";
其結果為:
User 1 is Danny
User 2 is Danny
User 1 is changing name...
User 1 is Eric
User 2 is Danny
若在第二行的等於之後加入"&",如下:
$user1 = "Danny";
$user2 =& $user1;
print "User 1 is " . $user1 . "<br>";
print "User 2 is " . $user2 . "<br>";
print "<br>User 1 is changing name...<br>";
$user1 = "Eric";
print "User 1 is " . $user1 . "<br>";
print "User 2 is " . $user2 . "<br>";
其結果為:
User 1 is Danny
User 2 is Danny
User 1 is changing name...
User 1 is Eric
User 2 is Eric
不曉得之前有在哪裡讀過一編文章,它是說當在instantiate新物件時,PHP5會自動用pass-by-reference(PHP4不會)。如下:
$user = new User("Danny");
[ 本帖最后由 itplanet 于 25-4-2007 09:48 AM 编辑 ] |
|
|
|
|
|
|
|

楼主 |
发表于 25-4-2007 09:48 AM
|
显示全部楼层
原帖由 itplanet 于 25-4-2007 09:40 AM 发表
若我沒記錯的話,PHP5並沒有如您所說的pass-by-reference,請看下例:
其結果為:
不曉得之前有在哪裡讀過一編文章,它是說當在instantiate新物件時,PHP5會自動用pass-by-reference(PHP4不會) ...
我想他举的例子应该是$foo & $bar都是object吧 |
|
|
|
|
|
|
|
发表于 25-4-2007 10:23 AM
|
显示全部楼层
原帖由 V4ndrake 于 25th Apr, 2007 09:48 发表
我想他举的例子应该是$foo & $bar都是object吧
哦!若是物件的話就會pass-by-reference,沒錯!
class User {
private $name;
public function __construct( $name ) {
$this->name =& $name;
}
public function setName( $name ) {
$this->name =& $name;
}
public function getName() {
return $this->name;
}
}
$user1 = new User("Danny");
$user2 = $user1;
print "User 1 is " . $user1->getName() . "<br>";
print "User 2 is " . $user2->getName() . "<br>";
print "User 1 is changing name...<br>";
$user1->setName( "Eric" );
print "User 1 is " . $user1->getName() . "<br>";
print "User 2 is " . $user2->getName() . "<br>";
其結果為:
User 1 is Danny
User 2 is Danny
User 1 is changing name...
User 1 is Eric
User 2 is Eric |
|
|
|
|
|
|
|
发表于 25-4-2007 10:37 AM
|
显示全部楼层
原帖由 itplanet 于 25-4-2007 09:40 AM 发表
若我沒記錯的話,PHP5並沒有如您所說的pass-by-reference,請看下例:
其結果為:
若在第二行的等於之後加入"&",如下:
其結果為:
不曉得之前有在哪裡讀過一編文章, ...
要弄清楚Value Type和Reference Type 。试试看一下例子:
- class User {
- private $name;
- function __construct($name){
- $this->name = $name;
- }
- public function set_name($name){
- $this->name = $name;
- }
- public function sayHello(){
- echo "Hello, my name is ".$this->name."\n";
- }
- }
- $user1 = new User("Eric");
- $user2 = $user1;
- echo "Testing say hello...\n";
- $user1->sayHello();
- $user2->sayHello();
- echo "Change name to Danny...\n";
- $user2->set_name("Danny");
- $user1->sayHello();
- $user2->sayHello();
复制代码 |
|
|
|
|
|
|
|
发表于 25-4-2007 10:40 AM
|
显示全部楼层
原帖由 itplanet 于 25-4-2007 10:23 AM 发表
哦!若是物件的話就會pass-by-reference,沒錯!
其結果為:
啊,比我快,哈哈 |
|
|
|
|
|
|
|
发表于 25-4-2007 10:55 AM
|
显示全部楼层
原帖由 V4ndrake 于 24-4-2007 10:01 PM 发表
我在实习中涅,而且该server已经在host着一些别的script了,我不想要求去更换php5
PHP5已经有了我知道,可是我还是在php4下工作
我正在慢慢picking up MVC,也已经开始慢慢implement,只是没有人指点,怕 ...
大概看了原码,我觉得可以的话把Request提升成一个class。把所有的request path, post/get, cookies等全部封装起来。 |
|
|
|
|
|
|
|

楼主 |
发表于 25-4-2007 02:57 PM
|
显示全部楼层
原帖由 苦瓜汤 于 25-4-2007 10:55 AM 发表
大概看了原码,我觉得可以的话把Request提升成一个class。把所有的request path, post/get, cookies等全部封装起来。
encapsulation = 封装?
怎么说呢?就是全部都丢进去request class里面?然后request class的constructor(建构子?)?
instantiate object(物件)的时候先对input作一些处理(addslashes?),然后再丢给controller?
问题是……我不懂我的MVC structure对不对。而且我想避免pass by reference,因为我到现在还不懂为什么我的pass by reference不对……(AddIncidentController那一个file)
快疯了…… |
|
|
|
|
|
|
|

楼主 |
发表于 25-4-2007 03:02 PM
|
显示全部楼层
|
|
|
|
|
|
|

楼主 |
发表于 26-4-2007 04:45 PM
|
显示全部楼层
什么人来救我? |
|
|
|
|
|
|
|

楼主 |
发表于 3-5-2007 05:35 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 3-5-2007 11:25 PM
|
显示全部楼层
如果使用 JSP, 非常简单.
http://localhost/View.jsp?id=UserDetail
View.jsp (front-controller)
<%
String viewClass = request.getParameter("id " ) + "View " ; // e.g. UserDetailView.java
ViewObject viewObject = ViewFactory.CreateObject(viewClass) ;
viewObject.processView(request, response);
%>
<html>
<title>My Title</title>
<body>
HEADER
<%
pageContext.include(request.getParameter("id " + "View.jsp " ); // e.g UserDetailView.jsp
%>
FOOTER
</body>
</html>
UserDetailView.java (extends ViewObject) View-Controller Class
public void processView (HttpServletRequest request, HttpServletResponse response)
{
//retrieve from database or from Model Class
request.setAttribute("UserName", "Mr. Test " );
request.setAttribute("DateOfBirth", "01-01-2004");
}
UserDetailView.jsp View
UserName : ${UserName} //Using JSTL
Date Of Birth : ${DateOfBirth}
or
UserName : <%=request.getAttribute("UserName" ) %>
Date Of Birth : <%=request.getAttribute("DateOfBirth " ) %>
[ 本帖最后由 hkloke2000 于 3-5-2007 11:29 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 4-5-2007 09:13 AM
|
显示全部楼层
回复 #13 V4ndrake 的帖子
了解了MVC後,不一定要跟足,只要你的框架有發揮MVC的精神就可以了。開始製作這個框架也許比較費功夫,但只要你成功將它穩定(stabilize)了後,你就會發覺它的可愛了。
Header和Footer是甚麼性質的東西呢?我的思考方式如下:它會控制程式流程(control flow)嗎?它有商業程序(business process)嗎?個人認為它沒有以上兩種性質,所以它是那一個部分呢?我會將它歸類為介面(View)的部份。
[ 本帖最后由 itplanet 于 4-5-2007 09:14 AM 编辑 ] |
|
|
|
|
|
|
|

楼主 |
发表于 4-5-2007 12:32 PM
|
显示全部楼层
原帖由 itplanet 于 4-5-2007 09:13 AM 发表
了解了MVC後,不一定要跟足,只要你的框架有發揮MVC的精神就可以了。開始製作這個框架也許比較費功夫,但只要你成功將它穩定(stabilize)了後,你就會發覺它的可愛了。
Header和Footer是甚麼性質 ...
哦,嘿嘿,我指的header / footer是 view的,所以应该是在view super class叫出来呱
楼上的楼上好像有解答了,谢谢 |
|
|
|
|
|
|
|

楼主 |
发表于 5-5-2007 11:15 AM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 6-5-2007 07:55 AM
|
显示全部楼层
原帖由 V4ndrake 于 5-5-2007 11:15 AM 发表
突然发觉到如果没有很好的规划的话,做MVC简直就是找死……好像我现在实习的project想到什么就做什么。虽然一直在掌控那个structure,但是好象越做越难maintain那个structure,尤其是message passing的那部分。 ...
与其凭空摸索,为何不参考现有的开源MVC框架原码呢? 看一看别人是怎么实现MVC框架和从原码中学习他们的经验,总比好过完全靠技术文章来所传达的概念来实践。 |
|
|
|
|
|
|
|

楼主 |
发表于 6-5-2007 05:11 PM
|
显示全部楼层
可是我的internship时间剩下不多(还有两三个星期罢了),我没有信心能够在这么短的时间内掌握的喔……除非我是为我的final year project准备
我的supervisor又追进度追到很紧,明明知道我不是experienced的,然后又是一个人做的……唉……很大压力涅 |
|
|
|
|
|
|
|
发表于 6-5-2007 05:21 PM
|
显示全部楼层
|
|
|
|
|
|
| |
本周最热论坛帖子
|