0

我的代码有问题。我在一个 php 页面中包含了两次相同的类,而当一个工作时另一个不起作用。我的代码可能比我解释得更好。

<?php
    if($_POST['submit']){
        if(!class_exists('Some_Class'){
            include('Class.php');
            $obj = new Some_Class;
            $obj->Do_something_2();
            }
            unset($obj);
        }
?>
<html>
    <head></head>
    <body>
        <form method="post" action="">
        <?php 
            if(!class_exists('Some_Class')){
            include('Class.php');
            $obj = new Some_Class;
            $obj->Do_something_1();
            }
            unset($obj);
        ?>
            <input type="text" name=""/>
            <input type="submit" name="submit"/>
        </form>
    </body>
</html>

现在发生的实际问题是,我以编程方式在表单中添加了一些 html 表单元素。当我提交表单时,我对回发进行了一些检查,如果设置了回发,那么我再次包含相同的类,但在类中执行其他功能。所以当我第一次刷新页面时,第一个类包含在表单中可以正常工作,但是在提交表单时,然后包含在检查回发工作中的类,而不是表单中的类。希望我能够解决我的问题,请告诉我这种编写代码的方法是否存在任何问题。

4

4 回答 4

6

那是因为class_exists('Some_Class'))第二次是真的。你必须搬家

$obj = new Some_Class;
$obj->Do_something_1();

在那个条件之外。

更好的解决方案是include_once页面顶部的类。

一个更好的解决方案是自动加载它。

请注意,即使您使用的是类,这仍然是程序风格。

于 2013-01-24T15:36:21.517 回答
2

如果该类存在,您将检查两次。

如果您将其更改为,第二个调用应该可以工作:

    <?php 
        if(!class_exists('Some_Class')){
          include('Class.php');
        }

        $obj = new Some_Class;
        $obj->Do_something_1();
        unset($obj);
    ?>

(这样设置括号,第一次应该更好,也是)

您没有取消设置该类,只是该类的一个对象实例。

于 2013-01-24T15:36:29.230 回答
2

我认为问题在于,第一次定义类时,它从那一刻起就保持定义,include_once 函数也可以帮助您确保只包含一次文档

所以你需要做的是在文档顶部声明一次然后使用它,例如:

<?php

if(!class_exists('Some_Class'){
    include_once('Class.php');

    }

if($_POST['submit']){            
        $obj = new Some_Class;
        $obj->Do_something_2();
        unset($obj);
    }
?>
<html>
    <head></head>
    <body>
        <form method="post" action="">
        <?php 
            $obj = new Some_Class;
            $obj->Do_something_1();
            unset($obj);
        ?>
            <input type="text" name=""/>
            <input type="submit" name="submit"/>
        </form>
    </body>
</html>

作为您的一方,重要的是要注意,在您的原始代码中,您在条件之外取消设置 $obj 变量,这可能会导致警告,因为 $obj 对象有时可能不存在,因为它超出了范围

于 2013-01-24T15:36:58.483 回答
1

看起来您每次都在创建一个通用对象。用这个:

<?php
include_once('Class.php');
$obj = new Some_Class;

if($_POST['submit'])
{
    $obj->Do_something_2();
}
?>
<html>
    <head></head>
    <body>
        <form method="post" action="">
            <?php $obj->Do_something_1(); } ?>
            <input type="text" name=""/>
            <input type="submit" name="submit"/>
        </form>
    </body>
</html>
于 2013-01-24T15:37:52.053 回答