1

所以,我有一些我认为非常简单的 php/html 代码。我只是不明白该_construct()方法是如何在 HTML 表单之前执行的。有人可以给我一个解释。

我页面上的代码:

<?php   class register {
        function __construct() {
            echo 'SYSTEM: This is the register page';
        }
    }

?>
    <form action="http://abc.org/test" method="POST">
    <input type="username" value="">
    <input type="password" value="">
    <input type="submit" value="Register">
    </form>

它的外观:

它看起来如何

编辑 很抱歉没有在原始帖子中包含此内容,但我正在从另一个页面创建课程。

页面 abc.com/a 有这个代码:

<?php require './'.'register'.'.php'; 
                $obj = new register; ?>

这个问题顶部的代码来自 register.php

4

4 回答 4

4

您正在定义一个类,但我看不到您在哪里实例化该类类型的对象。在您在此处粘贴的内容之后必须有更多代码进行实例化,因此您会看到 echo() 调用

于 2012-05-04T23:07:22.730 回答
2

我同意 bfavaretto,他的代码片段肯定会起作用。我通常喜欢将我的类、函数和输出保存在单独的文件中,以便它具有更多的跨项目可用性,如下所示。可能是更多的 php 编码,但最后,可重用性帮助了我很多。我将按如下方式组织您的项目。

正在加载的原始页面:

<?php require './includes/class/register.class.php'; ?>
<?php include './includes/registerModules.php'; ?>

$register = new register();  //Calls the constructor for class 'register'

<?php registerForm(); ?> // Runs the registerForm() function.  Nothing is output to the browser until this function is called.  That way you can include a test to see if a user is already logged in and use a header redirect (which requires that no output code be sent to the browser before the header function is called) if you so desire.

./includes/class/register.class.php

class register {
    function __construct() {
        echo 'SYSTEM: This is the register page';
    }
}

./includes/registerModules.php

function registerForm(){
    echo '<form action="http://abc.org/test" method="POST">
    <input type="username" value="">
    <input type="password" value="">
    <input type="submit" value="Register">
    </form>';
}

这样,任何时候您可能需要添加到 register.class.php 的任何类时,您都可以将它们包含在不一定需要显示注册表单的页面上。例如您可能需要做的任何后处理。这些类都将在那里,您可以使用适当的构造函数(在本例中$register = new register();)实例化它们。

由于您将这些函数包含在 registerModules.php 中,因此无论您在何处调用所需的函数,函数的输出都会出现在进行函数调用的位置。使格式化更容易。例如,在您调用<?php registerForm(); ?>. 这样,您可以在创建可能需要的任何构造函数后重用表单,如上所示,并在站点的其他区域以通用格式显示表单。

我知道在这种情况下,注册表可能只会出现一次,但这是可重复使用的格式,您可以将其应用于任何常见元素。

于 2012-05-04T23:38:52.273 回答
1

要调用构造函数,需要先实例化类,例如:

$register = new register();

这将调用它的构造函数。您所做的只是定义类,但它不会自动生成。函数也一样,它们也需要被调用。

请参阅构造函数new析构函数

于 2012-05-04T23:07:37.807 回答
1

类代码将在表单之后运行,因为在您的require行之后,表单已经输出。只有这样,您才能实例化该类,其构造函数会回显该消息。

如果您想在表单之前回显,只需在定义后立即实例化该类:

<?php   
class register {
    function __construct() {
        echo 'SYSTEM: This is the register page';
    }
}
$register = new register();
?>
<form action="http://abc.org/test" method="POST">
    <input type="username" value="">
    <input type="password" value="">
    <input type="submit" value="Register">
</form>
于 2012-05-04T23:15:26.697 回答