2014-02-20 101 views
1

在课堂上,大多数人使用public function name() { }来定义方法。但是,我已经看到它们的几个示例没有public关键字定义,如function name() { }。我对此感到困惑,因为我认为在课堂内你必须使用public/private/protected。功能和类别中的公共功能之间的差异

我做了同样的事情和function是做与public function完全相同的工作。

所以我的问题是,在课堂内使用functionpublic function时有什么区别?

+0

可能重复的[PHP中的类方法的默认可见性](http://stackoverflow.com/questions/2224380/default-visibility-of-class-methods-in-php) – kiamlaluno

回答

7

省略可见度为遗留码。 PHP 4不支持publicprotectedprivate,所有方法都是public

简称:"public function" == "function" // true

也是PHP manual参见:

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

同样var $attribute;相当于public $attributevar版本也是PHP 4遗留代码。

+0

因此,使用'公共'关键字? – James

+0

@我会说忽略它是**遗留**代码,因此为了清晰和完全未来兼容性,您总是应该*明确地写'public'。 – TimWolla

+1

我很想知道为什么你将它标记为“遗留”代码。 [documentation](http://www.php.net/manual/en/language.oop5.visibility.php#language.oop5.visiblity-methods)是特定的:方法*的可见性*可以被定义,但它不是必需的,并且提供了合适的默认值。根据我的阅读,非显式声明在新代码中仍然有效。 –

2

PHP> = 5没有区别。类方法可以定义为public,private或protected。没有任何明确的可见性关键字声明的方法被定义为public。

2

default visibility是公开的。如果一个方法声明没有明确的可见性前缀,它将是公开的。

以下声明是等价的:

function name() {}; 

public function name() {}; 
2

如果您没有设置在PHP的方法的知名度,这是一样的将其设置为公开。

PHP Manual

类方法可以被定义为public,private或protected。方法 声明没有任何明确的可见性关键字被定义为 公共。

<?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(); 
    } 
} 
1

如果你只是function方式定义,默认情况下它需要从PHP 5public范围(默认值)。

function sample { } 

public function sample { } 

没有差别

private =>可以在类

protected =>访问属性可以访问自己的财产类别和子类

public =>可以应用在任何地方访问。

-1

在OOP中PHP函数被称为方法。

class MyClass { 

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

    } 

如果您可以省略公开,私人或受保护的关键字在类中。如果你这样做,publicis假设。

  • 公共 - >可在整个范围内,这意味着它可以在任何地方
  • 访问保护 - >提供的类或它的子类中。
  • 私人 - >仅在定义函数

    这些功能是因为PHP 5.X可用,他们给你控制变量或函数的可见的可能性类可用。

如果你看到一个带有标识符的函数,比如public,protected和private,它们都在类中。

public function functionName(){} 

and 
function functionName(){} 

基本上是相同的不同之处在于一个有被公众可见度 和是面向对象的方式,并没有可见度的其他PHP正常功能。

相关问题