现在我听说了 c# 中的友元函数,然后我只是用谷歌搜索它以了解它。我想知道在 php 中还允许 friend 函数。所以我的问题是什么是 friend 功能?我如何在 php 中使用它?这仅在 OOP 中使用吗?
最佳答案
封装和抽象(数据隐藏)的概念表明非成员函数不应该能够访问对象的私有(private)和 protected 数据。政策是,如果您不是成员(member),则无法进入。但是在某些情况下,您可能需要与非成员(member)共享您的私有(private)或 protected 数据。在这里,“ friend ”前来救援。
友元函数是一个非成员函数,可以访问类的私有(private)成员和 protected 成员。
友元函数的指针:
友元函数可以声明为多个类的“友元”。 它没有类的范围,因为它取决于函数的原始定义和声明。 它不需要一个对象(属于将它声明为 friend 的类)。它可以像普通函数一样被调用。 因为它不是成员函数,所以它不能直接访问类的成员,必须使用对象名和每个成员名的成员运算符 (.)。 它可以在类中的任何地方声明而不影响其含义。 类的成员函数对用于调用它的对象的成员进行操作,而友元函数对作为参数传递给它的对象进行操作。 Link for php
PHP 实现
class MyBaseClass
{
protected static $friendClasses = array();
public function __get($name)
{
if (
// check if the caller's class is one of the friend classes
($trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)) &&
(isset($trace[1]['class']) && in_array($trace[1]['class'], static::$friendClasses))
) {
return $this->$name;
} else {
trigger_error('Member not available: ' . $name, E_USER_ERROR);
}
}
}
关于c# - php中的友元函数是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21620975/