2015-07-03 80 views
0

我目前在页面加载时声明的PHP中创建一个对象。该对象的目的是通过一个名为“checkHeartbeat”的函数来检查客户端与远程服务之间的连接。这个函数将被间歇调用来查看连接是否通过AJAX存在。PHP实现测试对象

我想实现一个测试参数改变对结果的连接,而查询远程服务:

  • 失败
  • 成功
  • 失败后X尝试
  • 成功x尝试

该参数当前通过由对象的构造函数拾取并通过$ _GET放置到变量中的URL传递。每次checkHeartbeat函数被AJAX调用时,它都会检查是否设置了'test'变量。

我的目标是在checkHeartbeat的每次调用中取消此检查,但我不确定执行此操作的最佳方法。 AJAX查询将始终调用“checkHeartbeat”,因此我一直在研究扩展/更改此功能。

我试图重新定义构造中的$ heartbeat对象作为测试对象,因此覆盖了checkHeartbeat函数,但这不起作用,只返回连接是活的。这是我重新考虑的代码,作为预期结果的演示。

class heartbeat { 
    public function __construct() { 
     if(isset($_GET['test'])) { 
      $heartbeat = new testHeartbeat; 
     } 
    } 
    public function checkHeartbeat() { 
     echo 'Live connection works!'; 
    } 
} 
class testHeartbeat { 
    public function checkHeartbeat() { 
     echo 'Test connection works!'; 
    } 
} 

$heartbeat = new heartbeat; 
$heartbeat->checkHeartbeat(); 

展望PHP对象还我试图看看使用对象接口来定义一个单独的函数但是我不知道如何做到这一点的工作,如果它仍然会通过只调用一个函数工作。

$heartbeat->checkHeartbeat(); 

我的查询,是什么改变了“checkHeartbeat”功能,如果测试参数已经被设置在每个AJAX调用,只有做到这一点的物体的初始结构不检查的最佳方法。如果测试参数已通过,checkHeartbeat将仅返回测试状态,或者如果未设置测试参数,则立即向远程服务发出呼叫。

+0

我不能调用testHeartbeat()函数的checkHeartbeat()函数,因此它不会被调用,也“如果变量设置即使参数”我没有看到变量,我只看到参数$ _Get ['test']。请正确解释你的问题 –

+0

我不明白你的问题。 1-为什么要测试连接是否在页面加载后立即生效? 2-您需要Ajax调用帮助,还是管理该部分? 3-什么是你需要从PHP? –

回答

0

我嘲笑这玩弄和做的工作。 我相信有更好的方法,实际上更干净。 我没有找到一种方法来修改同一个对象内的公共变量实例。 希望这会有帮助:

class heartbeat { 

    public $foo; 

    public function __construct() 
    { 
     $this->checkTest(); 
     return $this->foo; 
    } 

    public function checkTest() 
    { 
     if(isset($_GET['test'])) 
     { 
      $this->foo = 'true'; 
     } 
     else 
     { 
      $this->foo = 'false'; 
     } 
    } 
    public function __toString() 
    { 
     return $this->foo; 
    } 
    public function checkHeartbeat() { 
     echo 'Live connection works!'; 
    } 
} 
class testHeartbeat { 
    public function checkHeartbeat() { 
     echo 'Test connection works!'; 
    } 
} 

new heartbeat()=='true' ? $heartbeat = new testHeartbeat() : $heartbeat = new heartbeat(); 
$heartbeat->checkHeartbeat(); 

Bb!

+0

我通过检查header.php文件中完美工作的$ _GET来实现类似的方式。我唯一的做法是有更好的方法来做到这一点,只有在创建页面时调用一个对象? – Veljex