2015-05-09 47 views
-1

通常情况下,函数是从函数内部调用的,但是如果我想在一个类中但函数外调用一个函数,在php中会怎样。
[编辑]:
变化的函数x()静态函数x()
----
我的代码是:从函数外调用函数在php中

class MyClass { 
    $a = Zend_Registry::get("dbCred"); 
    static function x(){ ... } 
} 

这给了我下面的错误:

parse error, expecting `"function (T_FUNCTION)"' in MyClass.php on line 12 

[编辑]: 我实际上想要从函数x中访问$ a的值。

+1

你不能那样做。也许你想在对象创建时调用一个函数?然后使用__construct方法(obj构造函数) – Toumash

+0

您不能在类中声明代码,只能声明。如果你希望代码在实例化的时候运行,那就是构造函数('__construct()')的作用。 ^击败我。 – Devon

+0

但是,如果您在静态上下文中引用方法,则此构造函数将不起作用。 –

回答

0

更好的方式来解决的是,

class MyClass { 
    protected static $a; 

    static function x(){ 
     self::$a = Zend_Registry::get("dbCred"); 
     return self::$a; 
    } 
} 

,只要你想创建一个像$ a和从功能访问它的成员变量。

+0

有一个约束,即函数x必须是静态的。在这种情况下,构造函数将不会被执行。 –

+0

您需要静态成员变量和函数来调用静态函数。 – ashish

1

您不能在编译时(当代码正在被PHP程序读取和编译时)调用函数。您只能在运行时(代码正在执行时)调用函数。

在这种情况下,你可以调用类的构造函数:

class MyClass { 
    public $a; 
    function __construct() { 
     $this->a = Zend_Registry::get("dbCred"); 
    } 
} 

由于x()方法是静态的,你可以使静态成员以及,然后延迟加载在a凭据方法如下:

class MyClass { 
    public static $a; 
    public static function a() { 
     if (self::$a === null) { 
      self::$a = Zend_Registry::get("dbCred"); 
     } 
     // Do you stuff... 
    } 
}