我看到一些代码,当他们从另一个类调用php函数时,他们不再使用$this->functionName()
,
他们只是简单地引用函数名称,如functionName()
在我的index.php中
$help = new Helper();
$help->Test();
我想通过不执行$help
来调用测试函数。
如何做到这一点?为什么这可能?
答案 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
}
答案 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'));