PHP单例不能在简单的类中访问

时间:2018-01-23 08:10:44

标签: php oop singleton

祝大家新年快乐。

我在php中遇到一个简单的案例,也许你可以在这里点亮我的想法:

我有js脚本的php页面。此脚本(基于jquery)包含一个文档就绪事件函数,用于进行Ajax调用:

$.ajax({
    type: "POST",
    url: "actions/DatasourceEmail.php",
    data: param,                   
    dataType: "json",
    dataFilter: function(data, type){ 
        return data;
    },
    error: function(xhj, statut, thrown){
        alert(xhj.responseText);
    },
    success: function(result){
    ...

这很好用。我的问题出在服务器端。当我实习课程时,代码并没有进入内部,而是以我不这么认为的方式进行实例化。我有一个记录功能(单例),它在第一次调用时跟踪。但是当我实习时,不在课堂内。

class testclass
{
    function instance(){
        ApplicationMedSoft::CurrentApplication()->Trace("@@@@ initialisation !!!");
    }
}

...

ApplicationMedSoft::CurrentApplication()->Trace("@@@@ initialisation !!!");
$flex = new testclass();

结果日志:

    ...
    [23/01/2018 9:06:34] - [SQL] ==> 1 resultat(s)
    [23/01/2018 9:06:34] - @@@@ initialisation !!!  <= First call
    ??? second (inside class??)

我的所有文件都已正确包含在内 就像我的单身人员不工作是这个班级,但在其他一些课程中,它是有效的。 通过寻找太多问题,我觉得我再也看不到了。帮助:)

感谢您阅读

Iainh。

2 个答案:

答案 0 :(得分:0)

当你在这里制作一个类的对象时,你需要返回一些东西: -

$flex = new testclass();

echo $ flex或返回$ flex,如果它的数组和函数json_encode为它然后回显或返回如下: -

return json_encode($flex);

第三,你需要在它之后添加exit或die语句。

答案 1 :(得分:0)

如果您希望班级在刚创建时记录某些内容,则需要调用您的函数__construct而不是instance。所以你上课应该是...... ...

class testclass
{
    public function __construct(){
        ApplicationMedSoft::CurrentApplication()->Trace("@@@@ initialisation !!!");
    }
}

我还建议您将类名更改为TestClass,因为这更符合惯例。

如果你希望这个类的行为像一个单例类,那么你需要做一些稍微不同的事情......

class TestClass
{
    public static function instance(){
        ApplicationMedSoft::CurrentApplication()->Trace("@@@@ initialisation !!!");
    }
}

在方法中添加static,您可以在不创建新对象的情况下调用它,使用...来调用它。

$flex = TestClass::instance();

阅读http://www.phptherightway.com/pages/Design-Patterns.html了解更多信息。