PHP类调用函数

时间:2011-11-12 15:30:24

标签: php

我看到一些代码,当他们从另一个类调用php函数时,他们不再使用$this->functionName(), 他们只是简单地引用函数名称,如functionName()

在我的index.php中

 $help = new Helper();
 $help->Test();

我想通过不执行$help来调用测试函数。

如何做到这一点?为什么这可能?

6 个答案:

答案 0 :(得分:4)

在PHP中,您可以将程序化的编程风格与面向对象的风格相结合。这意味着函数既可以作为类的成员存在,也可以作为独立函数存在。

对于普通(实例)方法,使用$classinstance->methodname()调用成员函数(或方法),或者对于静态方法调用ClassName::methodName()

只调用独立函数而不引用任何类或对象。如果您愿意,可以将它们放在单独的文件中。 声明和用法如下:

example.php

class MyClass
{
  $member = 'Hello world';

  function MyMethod()
  {
    // The method can use the instance variable (member variable) 
    // using $this to refer to the instance of the class
    echo $this->member;  
  }

  static function MyStaticMethod()
  {
    echo 'Hello static world';
  }

}

function MyFunction()
{
  echo 'Hello';
}

index.php

// To include the class and its methods, as well as the function.
require_once 'example.php';

// Call an instance method
$instance = new MyClass();
$instance->MyMethod();

// Call a static method
MyClass::MyStaticMethod();

// Call a stand-alone function
MyFunction();

答案 1 :(得分:1)

使用->运算符,您可以在类中引用函数。

<?php
class A {
  public function a() {
    $this->b();  //references the function b() in $this class
  }

  public function b() {
    echo 'Was called from function a() in class A';
  }
}

function c() {
  echo "I'm just a simple function outside a class";
}

//now you can do following calls
$class_a = new A();
$class_a->a();
c(); //references function c() within the same scope

输出结果为:

  

从A类中的函数a()调用

     

我只是一个类外的简单函数

但您也可以执行以下操作:将函数c()外包到外部文件function_c.php

现在,您可以在其他任何地方包含/要求该文件,并使用它的内容:

include 'function_c.php';
c(); //the function is now available, although it was defined in another file

答案 2 :(得分:1)

独立功能的定义如下:

function myfunction() {
    # whatever
}

另见http://www.php.net/manual/en/functions.user-defined.php

答案 3 :(得分:0)

你可以从一个类中的另一个类开始一个函数,例如:

require "myExternClass.php";
class myClass extends myExternClass
{
    public function a() {
            $this->b(); /* function b is in the class myExternClass */
    }
}

答案 4 :(得分:0)

您可以在常规函数中包含有问题的代码:

function TestClass() {
  $help = new Helper();
  return $help->Test();
}

然后,在index.php文件中,您可以像这样调用函数:

TestClass();

答案 5 :(得分:0)

一般情况下,如果没有对象本身,则无法调用对象的方法。 但是对于某些情况,当方法实际上没有使用任何对象的属性时,测试可能会接受使用call_user_func_array调用它,传递一些虚拟值而不是对象。

 class A     {
    var $a;

    function doNop() { echo "Nop";}
    function doA() { echo "[".$a."]"; }
 }

 // instead of this
 $a = new A; 
 $a->doNop();

 // you _may_ use this
 A::doNop();

 // but this will fail, because there's no object to apply doA() to.
 A::doA();

 class A_dummy { $a };

 // however, for testing purposes you can provide a dummy instead of real A instance
 $b = new A_dummy;
 call_user_func(array($b, 'A::doA'));