PHP在子函数上使用类函数

时间:2013-05-26 16:11:05

标签: php

我有一个函数的测试类,包括我可以使用包含页面的这个类函数,但我不能在包含页面的函数上使用此函数,例如:

testClass.php

class test
{
    public function alert_test( $message )
     {
       return $message;
     }
}

包括课程: 在这个使用类我没有问题

text.php

<?php
include 'testClass.php';
$t= new test;
echo alert_test('HELLO WORLD');
?>

但我不能使用alert_test函数:

<?php
include 'testClass.php';
$t= new test;
function test1 ( $message )
{
       echo alert_test('HELLO WORLD');
/*
       OR

       echo $t->alert_test('HELLO WORLD');
*/
 }
 ?>

我想在子功能中使用测试类

4 个答案:

答案 0 :(得分:1)

echo $t->alert_test('HELLO WORLD');怎么样?您必须'告诉'PHP他必须在哪里找到该函数,在本例中是$ t,它是测试类的一个实例。

<?php
include 'testClass.php';
function test1 ( $message )
{
   $t = new test;
   echo $t->alert_test('HELLO WORLD');
}
?>

答案 1 :(得分:0)

即使在第一个示例中,您也应该“遇到问题”,因为alert_test()test类的实例函数。

您必须将实例方法调用为:

$instance -> method( $params );

所以:

$t -> alert_test();

但是本地函数[作为你的test1]不应该依赖于全局对象:如果需要,可以将它们作为函数参数传递。

答案 2 :(得分:0)

您应该将实例($t)传递给您的函数,即:

<?php

class test
{
    public function alert_test( $message )
     {
       return $message;
     }
}

$t = new test;

function test1 ( $message, $t )
{
    echo $t->alert_test('HELLO WORLD');
}

作为替代方案(更好的恕我直言),你可以将你的函数声明为static,这样你甚至不需要实例化test类,即:

class Message {
  static function alert($message) {
    echo $message;
  }
}

function test_alert($msg) {
  Message::alert($msg);
}

test_alert('hello world');

答案 3 :(得分:0)

您可以使用闭包:

$t = new test;
function test1($message) use ($t) {
    $t->test_alert($message);
}