2011-10-07 81 views
3

我对OOP很陌生,在PHP上很生疏。我想知道这是否是从类调用函数的有效方法?类中的PHP调用函数 - 有没有更简单的方法?

class newclass { 
    public function testfunc { 
     return '1'; 
    } 
} 

我可以这样称呼它:

echo testfunc->newclass(); 

或像这样:

echo newclass()::testfunc; 

我总是看到它实施例中定义如下图所示,它似乎是额外的代码?:

$this = new newclass(); 
$this->testfunc(); 
echo $this; 

任何帮助将grea因为我刚刚开始围绕这个面向对象的事情而感到欣慰。如果我外出吃午饭,也许有人可能会建议一个真正的好的指导,为一个真正的初学者在课堂/面向对象的链接。谢谢!

+5

http://php.net/manual/en/language.oop5.php – NullUserException

回答

1

你可以做testfunc静态的,并调用它像这样:

class newclass{ 

    public static function testfunc{ 

    return '1'; 
    } 
} 

echo newclass::testfunc(); 

有没有像这样echo testfunc->newclass();和做它像

$class = new newclass(); 
echo $class->testfunc(); 

是这样做时,该方法的正确方法一个实例方法,而不是一个静态方法。 注意,没有能力在静态方法内引用$this

2

new是实例化类的关键字。如果你想使用一个没有类实例的方法,它应该是一个静态方法。有一个静态方法,声明该方法为静态。

class foo 
{ 
    public static function bar() 
    { 
     return 'hello!'; 
    } 
} 

如何使用它?

echo foo::bar(); //Will print hello 
+1

我觉得你错过了某处的'function'。 – sberry

+0

谢谢,我发现这有帮助。如果我要说用一个连接到数据库的函数创建一个数据库类。我可能会使它成为一个静态的方法? – DieselPower

-2

可以包括包含您的功能

<?php 
//print.php 
function printHello(){ 
echo "Hello world"; 
} 
?> 

然后包括它并调用该函数的PHP文件...

<?php 
include "print.php"; 
printHello(); 

?> 
+0

这确实不会回答这里提出的问题。 – markus

+0

好吧我的坏....... –

0

可以为构造函数创建一个静态包装这将允许在同一行上链接方法调用。

<?php 

class ClassA { 

    static function create() { return new self(); } 

    function method1() { ... } 

} 


ClassA::create()->method1(); 
4

这两种方式的工作,并有他们的用例。

你的第一种情况是使用类的实例进行常规函数调用,第二种情况是对静态函数的调用。

静态应该小心使用,它的使用通常是重构/重新设计的必要标志。

面向对象编程的要点是通过编写类(蓝图)对世界进行建模,然后根据需要使用new来创建该类的独立实例。每个实例都是具有类的DNA的小生物体,您可以在每个实例上调用相同的类方法而不影响其他实例。

但是,静态调用与类的实例无关,因此没有使用对象。这是一个全球性的工具功能调用,实际上打破了封装思想。

所以,我并不是说没有静态类和方法的用例,但应该小心使用它们。

+0

“静态应该小心使用,它的使用往往是一个迹象,重构/重新设计是必要的”我喜欢这条线。 – dpp

+0

感谢您的深入解释。我在另一个回复中发布了一个问题,想知道静态方法是否适合db类中的数据库连接函数。你有什么想法/原因? – DieselPower

+0

IMO没有任何意义。您希望能够创建多个句柄并将实例存储在注册表中等等。 – markus

相关问题