在 Class 方法中调用函数?

我一直试图找出如何去做这件事,但我不太确定如何去做。

下面是我正在尝试做的事情的一个例子:

class test {
public newTest(){
function bigTest(){
//Big Test Here
}
function smallTest(){
//Small Test Here
}
}
public scoreTest(){
//Scoring code here;
}
}

这里是我遇到问题的部分,我如何调用 bigTest () ?

424938 次浏览

您需要调用 newTest来使在该方法中声明的函数“可见”(参见 函数中的函数)。但那只是普通函数,没有方法。

试试这个:

class test {
public function newTest(){
$this->bigTest();
$this->smallTest();
}


private function bigTest(){
//Big Test Here
}


private function smallTest(){
//Small Test Here
}


public function scoreTest(){
//Scoring code here;
}
}


$testObject = new test();


$testObject->newTest();


$testObject->scoreTest();

为了有一个“函数中的函数”,如果我理解您的要求,您需要 PHP 5.3,在这里您可以利用新的 Closure 特性。

所以你可以:

public function newTest() {
$bigTest = function() {
//Big Test Here
}
}

您提供的示例不是有效的 PHP,并且存在一些问题:

public scoreTest() {
...
}

不是正确的函数声明——需要使用“ function”关键字声明函数。

语法应该是:

public function scoreTest() {
...
}

其次,在 public function (){}中包装 bigTest ()和 small Test ()函数并不会使它们成为私有函数ーー您应该分别对这两个函数使用 private 关键字:

class test () {
public function newTest(){
$this->bigTest();
$this->smallTest();
}


private function bigTest(){
//Big Test Here
}


private function smallTest(){
//Small Test Here
}


public function scoreTest(){
//Scoring code here;
}
}

另外,在类声明(‘ Test’)中大写类名也是惯例。

希望能帮上忙。

例子1

class TestClass{
public function __call($name,$arg){
call_user_func($name,$arg);
}
}
class test {
public function newTest(){


function bigTest(){
echo 'Big Test Here';
}
function smallTest(){
echo 'Small Test Here';
}


$obj=new TestClass;


return $obj;
}


}
$rentry=new test;
$rentry->newTest()->bigTest();

例子2

class test {
public function newTest($method_name){


function bigTest(){
echo 'Big Test Here';
}
function smallTest(){
echo 'Small Test Here';
}


if(function_exists( $method_name)){
call_user_func($method_name);
}
else{
echo 'method not exists';
}
}


}
$obj=new test;
$obj->newTest('bigTest')

To call any method of an object instantiated from a class (with statement new), you need to "point" to it. From the outside you just use the resource created by the new statement. 在 new 创建的任何对象 PHP 中,将相同的资源保存到 $this 变量中。 因此,在类中,您必须通过 $this 指向该方法。 In your class, to call smallTest from inside the class, you must tell PHP which of all the objects created by the new statement you want to execute, just write:

$this->smallTest();

我认为你在寻找类似这样的东西。

class test {


private $str = NULL;


public function newTest(){


$this->str .= 'function "newTest" called, ';
return $this;
}
public function bigTest(){


return $this->str . ' function "bigTest" called,';
}
public function smallTest(){


return $this->str . ' function "smallTest" called,';
}
public function scoreTest(){


return $this->str . ' function "scoreTest" called,';
}
}


$test = new test;


echo $test->newTest()->bigTest();

如果要调用当前类的静态变量或函数,也可以使用 self::CONST代替 $this->CONST

  class sampleClass
{
public function f1()
{
return "f1 run";
}


public function f2()
{
echo ("f2 run" );
$result =  $this->f1();
echo ($result);
}


f2();


}

产出:

F2运行 f1 run

class test {
public newTest(){
$this->bigTest();
$this->smallTest();
}


private  function bigTest(){
//Big Test Here
}


private function smallTest(){
//Small Test Here
}


public scoreTest(){
//Scoring code here;
}
}