我是OOP的新手,在PHP上非常生疏。我想知道这是否是从类中调用函数的有效方法?
class newclass {
public function testfunc {
return '1';
}
}
我可以这样称呼它:
echo testfunc->newclass();
或者像这样:
echo newclass()::testfunc;
我总是看到它在下面的示例中定义,它看起来像额外的代码?:
$this = new newclass();
$this->testfunc();
echo $this;
任何帮助都会非常感激,因为我刚刚开始围绕这个OOP的事情。如果我要去吃午餐,也许有人可以建议链接到真正的初学者课程/ OOP的指南。谢谢!
答案 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();
?>