类中函数和公共函数的区别
Posted
技术标签:
【中文标题】类中函数和公共函数的区别【英文标题】:Difference between functions and public functions in classes 【发布时间】:2014-03-21 19:02:16 【问题描述】:在类中,大多数人使用public function name()
来定义方法。但是,我已经看到了几个在没有 public
关键字的情况下定义它们的示例,例如 function name()
。我对此感到困惑,因为我认为您必须在课堂上使用公共/私有/受保护。
我做了同样的事情,function
做的工作与public function
完全相同。
所以我的问题是,在课堂上使用function
和public function
有什么区别?
【问题讨论】:
Default visibility of class methods in php的可能重复 【参考方案1】:省略可见性是遗留代码。 PHP 4 不支持public
、protected
和private
,所有方法都是public
。
短:"public function" == "function" // true
另见PHP manual:
// This is public function Foo() $this->MyPublic(); $this->MyProtected(); $this->MyPrivate();
同样var $attribute;
等价于public $attribute
。 var
版本也是 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 类中定义为公共函数?