PHP中的调用函数 - 有更简单的方法吗?

时间:2011-10-07 05:39:30

标签: php oop class function

我是OOP的新手,在PHP上非常生疏。我想知道这是否是从类中调用函数的有效方法?

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

我可以这样称呼它:

echo testfunc->newclass();

或者像这样:

echo newclass()::testfunc;

我总是看到它在下面的示例中定义,它看起来像额外的代码?:

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

任何帮助都会非常感激,因为我刚刚开始围绕这个OOP的事情。如果我要去吃午餐,也许有人可以建议链接到真正的初学者课程/ OOP的指南。谢谢!

5 个答案:

答案 0 :(得分:4)

这两种方式都有效并且有用例。

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

应小心使用静态,并且使用静态通常表明需要进行重构/重新设计。

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

然而,静态调用与类的实例无关,因此没有使用对象。这是对某些工具功能的全局调用,实际上打破了封装的想法。

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

答案 1 :(得分:2)

new是实例化类的关键字。如果要使用没有类实例的方法,则应该是静态方法。要有一个静态方法,请将该方法声明为static。

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

如何使用它?

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

答案 2 :(得分:1)

您可以将testfunc设为静态,并将其称为:

class newclass{

  public static function testfunc{

     return '1';
  }
}

echo newclass::testfunc();

没有像这样echo testfunc->newclass();并且像

那样做
$class = new newclass();
echo $class->testfunc();
当方法是实例方法而不是静态方法时,

是正确的方法。 注意,无法在静态方法中引用$this

答案 3 :(得分:0)

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

<?php

class ClassA {

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

     function method1() { ... }

}


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

答案 4 :(得分:-2)

你可以包含包含你的功能的php文件

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

然后包含它并调用函数...

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

?>