2011-12-31 50 views
-1

我是PHP新手,一直在试图获得一些经验。我有C++经验,但已经有一段时间了,所以这是一个复习。在PHP中使用对象而不先实例化

因此,我偶然发现了JPMaster的PHP登录脚本,并且在注册表单中我感到困惑。如果您查看HTML表格,则会使用$ form对象,但它不会在此页面上的任何位置实例化,但从我所知道的对象也可以从这里开始,因为它是添加新信息而不是仅仅通过。在查看'session.php'(登录系统中的另一个文件)时,会在其使用的函数中创建对象$ form和$ error,例如login,register,edit account等。

下面是下载完整登录脚本的链接。下载位于代码的底部。 http://www.evolt.org/node/60384

我以为我对OOP有一个很好的理解,或者它是PHP独有的东西,但任何人都可以简单地解释一下哪里/何时可以创建一个新对象?由于该对象首先在此窗体上使用,因此我想它也必须在这里创建。任何人都可以向我指出一篇文章的方向,或者可以澄清我的困惑的东西吗?

<tr><td>Username:</td><td><input type="text" name="user" maxlength="30" value="<? echo  $form->value("user"); ?>"></td><td><? echo $form->error("user"); ?></td></tr> 

我引用的特定部分位于表格中,例如在该行中。我知道它是这样写的,所以正确类型的错误消息将出现在行旁边,我只是混淆了为什么该对象不是在此表单上创建的,即使信息首先在提交表单时从此页面开始。

<? 

include("include/session.php"); 
?> 

<html> 
<title>Registration Page</title> 
<body> 

<? 

if($session->logged_in){ 
echo "<h1>Registered</h1>"; 
echo "<p>We're sorry <b>$session->username</b>, but you've already registered. " 
    ."<a href=\"main.php\">Main</a>.</p>"; 
} 

else if(isset($_SESSION['regsuccess'])){ 
/* Registration was successful */ 
if($_SESSION['regsuccess']){ 
    echo "<h1>Registered!</h1>"; 
    echo "<p>Thank you <b>".$_SESSION['reguname']."</b>, your information has been added to the database, " 
     ."you may now <a href=\"main.php\">log in</a>.</p>"; 
} 
/* Registration failed */ 
else{ 
echo "<h1>Registration Failed</h1>"; 
echo "<p>We're sorry, but an error has occurred and your registration for the username <b>".$_SESSION['reguname']."</b>, " 
     ."could not be completed.<br>Please try again at a later time.</p>"; 
} 
unset($_SESSION['regsuccess']); 
unset($_SESSION['reguname']); 
} 

else{ 
?> 

<h1>Register</h1> 
<? 
if($form->num_errors > 0){ 
echo "<td><font size=\"2\" color=\"#ff0000\">".$form->num_errors." error(s) found</font> </td>"; 
} 
?> 
<form action="process.php" method="POST"> 
<table align="left" border="0" cellspacing="0" cellpadding="3"> 
<tr><td>Username:</td><td><input type="text" name="user" maxlength="30" value="<? echo $form->value("user"); ?>"></td><td><? echo $form->error("user"); ?></td></tr> 
<tr><td>Password:</td><td><input type="password" name="pass" maxlength="30" value="<? echo $form->value("pass"); ?>"></td><td><? echo $form->error("pass"); ?></td></tr> 
<tr><td>Email:</td><td><input type="text" name="email" maxlength="50" value="<? echo $form->value("email"); ?>"></td><td><? echo $form->error("email"); ?></td></tr> 
<tr><td colspan="2" align="right"> 
<input type="hidden" name="subjoin" value="1"> 
<input type="submit" value="Join!"></td></tr> 
<tr><td colspan="2" align="left"><a href="main.php">Back to Main</a></td></tr> 
</table> 
</form> 

<? 
} 
?> 

</body> 
</html> 

回答

3

如果你看一下session.php文件页面的底部,你会看到这一点:

$session = new Session; 

/* Initialize form object */ 
$form = new Form; 

请记住,当文件include()“在PHP D,任意变量/对象定义/在该文件中实例化的指令在include()指令的范围内完成。实际上,即使这两个对象位于另一个文件中,它们也会被视为字面上属于您自己的脚本的一部分,并且处于相同的作用域级别。

+0

没错。当使用include()时,就好像包含文件中的所有代码都被复制并粘贴到包含文件中一样。 – 2011-12-31 02:36:29

+0

谢谢你们,我想我错过了$ form = new Form;在session.php页面上。就像我说的那样,自从我做了任何编程以来,这已经过去了一段时间,所以我完全放弃了自己的想法。 – user1123815 2011-12-31 02:38:13

+0

刚刚更新了一个表单,我正在通过初始化不同的表单上的对象,它的工作完美。再次感谢! – user1123815 2011-12-31 02:45:41