类中的函数和公共函数之间的区别

6
在类中,大多数人使用public function name() { }来定义方法。然而,我看到过几个例子,它们没有使用public关键字进行定义,例如function name() { }。我对此感到困惑,因为我认为在类内部必须使用public/private/protected。
我做了同样的事情,function完成了与public function相同的工作。
因此,我的问题是,在类内部使用functionpublic function有什么区别?

可能是PHP中类方法的默认可见性的重复问题。 - apaderno
6个回答

15
忽略可见性是“遗留代码”。PHP 4不支持public,protected和private,所有方法都为public。简写方式:"public function" == "function" // true。请参阅PHP手册:PHP manual
// This is public
function Foo()
{
    $this->MyPublic();
    $this->MyProtected();
    $this->MyPrivate();
}
同样地,var $attribute; 等效于 public $attributevar 版本也是 PHP 4 的遗留代码。

@Will 我说忽略它是遗留代码,因此为了清晰和完全的未来兼容性,你应该始终明确地编写public - TimWolla
1
我很好奇你为什么将这段代码标记为“遗留”代码。文档明确指出:方法的可见性可以被定义,但不是必需的,并且提供了适当的默认值。根据我的阅读,非显式声明在新代码中仍然有效。 - George Cummins
@GeorgeCummins 它起源于 PHP 4,为了向后兼容而存在。其他 OOP 兼容功能已经被削减(即为命名空间类命名的构造函数),显式定义可见性是唯一安全的方式。 - TimWolla

4

如果在PHP中不设置方法的可见性,它与将其设置为public相同。

来自PHP手册:

类方法可以定义为public、private或protected。未声明任何显式可见性关键字的方法被定义为public。

<?php
/**
 * Define MyClass
 */
class MyClass
{
    // Declare a public constructor
    public function __construct() { }

    // Declare a public method
    public function MyPublic() { }

    // Declare a protected method
    protected function MyProtected() { }

    // Declare a private method
    private function MyPrivate() { }

    // This is public
    function Foo()
    {
        $this->MyPublic();
        $this->MyProtected();
        $this->MyPrivate();
    }
}

4

在 PHP 5 或更高版本中,定义类方法时可以使用 public、private 或 protected 关键字来指定其可见性。如果没有明确指定可见性关键字,则该方法默认为公有(public)。


3

如果你只是用 function 来定义函数,那么默认情况下,从PHP 5开始,它会采用 public 作用域。

function sample { }

并且

public function sample { }

它们之间没有区别

private => 只能在类内部访问该属性。

protected => 可以在自身类和子类中访问该属性。

public => 可以在应用程序的任何地方访问该属性。


2
“默认可见性”是公共的。如果一个方法没有显式地声明可见性前缀,它将是公共的。
以下声明是等效的:
function name() {};

public function name() {};

0
在面向对象的PHP中,函数被称为方法。
  class MyClass {

    public function aMethod() {
    // (do stuff here)
    }
     function myMethod(){} //here public property is assumed

    } 

当你在类中选择性地省略public、private或protected关键字时,如果这样做,则默认为public。

  • public ->在整个范围内可用,即可在任何地方访问
  • protected ->在类或其子类中可用。
  • private ->仅在定义函数的类中可用

    自php 5.X版本以来就提供了这些特性,它们使您有可能控制变量或函数的可见性。

如果您看到带有标识符(如public、protected和private)的函数,则它们位于类中。

public function functionName(){} 

and 
function functionName(){}

它们基本相同,只是一个具有公共可见性级别并且是面向对象的方式,而另一个是没有可见性级别的普通 PHP 函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接