2011-08-17 60 views
2

如果我有两个类A,B和一个不扩展另一个,它们是分开的,但都加载到脚本中,我仍然可以从B引用函数A?从第二级调用第一级没有延伸的函数?

class A { 
    function one() { 
     echo "Class A"; 
    } 
} 

class B { 
    function two() { 
     echo "Class B"; 
     A::one(); 
    } 
} 


$a new A; 
$b = new B; 

$b->two(); 
+0

[使用A类对象的非相关类B的A类中的访问函数的可能重复](http://stackoverflow.com/questions/7101204/access-function-in-class-a-from-non- related-class-b-using-object-of-a- – hakre

+0

你不会犯错尝试使用类来设置名称空间的方式,对吗?因为这是一个非常糟糕的想法。 – staticsan

回答

0

你可以定义一个为静态,但为什么你会做这样的事情?

+0

我需要把这个放在每一个20的文件中,所以我宁愿把“$ b-> two();”而不是5行长的整个事情。 – Poemm

1

您可以像这样定义它。

class A { 
    public static function one() { 
     echo "Class A"; 
    } 
} 

class B { 
    function two() { 
     echo "Class B"; 
     A::one(); 
    } 
} 


$a new A; 
$b = new B; 

$b->two(); 
+0

这对我有用,但现在这个函数有$ this这个函数,并且因为静态它不再工作,有没有方法可以在没有$ this的情况下调用同一个类中的变量? – Poemm

+0

其实它的名言“调用一个成员函数one()在一个非对象在” – Poemm

2

面对它,是的,你可以做到这一点。但是,A类中的函数one()需要声明为static,以使您的呼叫符号有效。 (这使得它类方法

另一种选择,在你的代码的最后行建议,是实例$b调用函数实例$a。这些功能被称为实例方法,并且是您通常如何与对象进行交互的方式。要访问这些方法,它们必须声明为public。声明为private的方法只能由该类中的其他方法调用。

有几种方法可以在代码中调用实例方法。这些是明显的两个,你可以通过$a作为参数传递给函数,或者你可以在你的方法中创建一个A类的实例。

你究竟在努力实现什么?