在PHP中使用对象而不首先实例化

时间:2011-12-31 02:31:16

标签: php mysql oop object

我是PHP的新手,并一直在努力获得一些经验。我有使用C ++的经验,但已经有一段时间了,所以这是一个复习。

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

这是下载完整登录脚本的链接。下载位于代码墙的底部。 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>

1 个答案:

答案 0 :(得分:3)

如果您查看session.php页面的底部,您会看到:

$session = new Session;

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

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