与面向对象的PHP混淆

时间:2013-01-24 15:32:51

标签: php class object

我的代码出现问题。我在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 个答案:

答案 0 :(得分:6)

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

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

在有条件之外。

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

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

请注意,即使您正在使用类,这仍然是一种程序样式。

答案 1 :(得分:2)

如果班级存在,你会检查两次。

如果您将其更改为:

,则第二个调用应该有效
    <?php 
        if(!class_exists('Some_Class')){
          include('Class.php');
        }

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

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

你不是要取消这个类,只是该类的一个对象实例。

答案 2 :(得分: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对象可能不会存在,因为它超出了范围

答案 3 :(得分: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>