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

Posted

技术标签:

【中文标题】类中函数和公共函数的区别【英文标题】:Difference between functions and public functions in classes 【发布时间】:2014-03-21 19:02:16 【问题描述】:

在类中,大多数人使用public function name() 来定义方法。但是,我已经看到了几个在没有 public 关键字的情况下定义它们的示例,例如 function name() 。我对此感到困惑,因为我认为您必须在课堂上使用公共/私有/受保护。

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

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

【问题讨论】:

Default visibility of class methods in php的可能重复 【参考方案1】:

省略可见性是遗留代码。 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 遗留代码。

【讨论】:

@Will 我会说省略它是遗留代码,因此您应该总是明确地写public,以便清楚和完全兼容未来。跨度> 我很想知道您为什么将其标记为“遗留”代码。 documentation 是特定的:可以定义方法的可见性,但不是必需的,并且提供了合适的默认值。根据我的阅读,非显式声明在新代码中仍然有效。 @GeorgeCummins 它起源于 PHP 4,并且为了向后兼容而存在。其他 OOP 兼容性功能已被取消(即命名为命名空间类的类的构造函数),显式定义可见性是唯一安全的方法。【参考方案2】:

PHP >=5 没有区别。类方法可以定义为公共的、私有的或受保护的。没有任何显式可见性关键字声明的方法被定义为 public。

【讨论】:

【参考方案3】:

default visibility 是公开的。如果声明的方法没有显式的可见性前缀,它将是公共的。

以下声明是等价的:

function name() ;

public function name() ;

【讨论】:

【参考方案4】:

当你在php中不设置方法的可见性时,与设置为public是一样的。

来自PHP Manual:

类方法可以定义为公共的、私有的或受保护的。方法 没有任何显式可见性关键字的声明被定义为 公开。

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

【讨论】:

【参考方案5】:

如果您仅使用 function 定义,则默认采用 PHP 5 中的 public 范围(默认)。

function sample  

public function sample  

它们之间没有区别

private => 可以访问类中的属性

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

public => 可以访问应用程序中的任何位置。

【讨论】:

【参考方案6】:

在 OOP 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正常功能。

【讨论】:

以上是关于类中函数和公共函数的区别的主要内容,如果未能解决你的问题,请参考以下文章

具体类中的受保护构造函数与抽象类中的公共构造函数

为啥在 A 类中声明为友元的函数必须在 B 类中定义为公共函数?

在 C++ 中的类中初始化与公共和私有相同的函数:它是如何工作的?

静态构造函数、内部构造函数和公共构造函数有啥区别?

php静态方法-“静态函数”和“公共静态函数”有啥区别?

如何在 ES6 类中声明公共函数?