C# 什么是php中的friend函数?
现在我听说了c#中的friend函数,然后我只是通过谷歌来了解它。我想知道在php中还允许使用友元函数。所以我的问题是什么是朋友函数?如何在php中使用它?这是否仅用于OOPs?封装和抽象(数据隐藏)的概念表明,非成员函数不应能够访问对象的私有和受保护数据。政策是,如果你不是会员,你就不能进去。但在某些情况下,您可能需要与非成员共享您的私人或受保护的数据。“朋友们”来拯救我们 友元函数是可以访问类的私有和受保护成员的非成员函数 友元函数的指针: 友元函数可以声明为多个类的“友元”。 它没有类的作用域,因为它依赖于函数的原始定义和声明。 它不需要对象(声明为友元的类的对象)。它可以像普通函数一样调用。 由于它不是成员函数,因此无法直接访问类的成员,并且必须对每个成员名称使用对象名和成员运算符(.)。 它可以在类中的任何位置声明,而不影响其含义。 类的成员函数操作用于调用它的对象的成员,而友元函数操作作为参数传递给它的对象 PHP实现C# 什么是php中的friend函数?,c#,php,C#,Php,现在我听说了c#中的friend函数,然后我只是通过谷歌来了解它。我想知道在php中还允许使用友元函数。所以我的问题是什么是朋友函数?如何在php中使用它?这是否仅用于OOPs?封装和抽象(数据隐藏)的概念表明,非成员函数不应能够访问对象的私有和受保护数据。政策是,如果你不是会员,你就不能进去。但在某些情况下,您可能需要与非成员共享您的私人或受保护的数据。“朋友们”来拯救我们 友元函数是可以访问类的私有和受保护成员的非成员函数 友元函数的指针: 友元函数可以声明为多个类的“友元”。 它没有类的作
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);
}
}
}
好友函数最好在多个不同的类之间共享。此类函数可以声明为一个类的成员函数,也可以声明为全局函数。在任何一种情况下,都可以通过在接纳它们的类中使用友元说明符,将它们设置为其他类的友元。这样的函数可以使用类的所有属性,这些属性将它们命名为朋友,就好像它们自己是该类的成员一样 友元声明本质上是一个成员函数的原型,但是不需要使用双冒号语法附加该类名称的实现,而是由另一个类的全局函数或成员函数提供匹配 对于这个PHP5.3+实现,您需要一个基类。需要有朋友的班级应该扩展的班级。这个基类提供了friend架构,因此它只需要编码一次
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);
}
}
}
Then all you need to do do make add a friend to your class is declare it.
class Pooh extends MyBaseClass
{
protected static $friendClasses = array('Piglet', 'Tigger');
protected $feelings = 'sad';
}
class Piglet
{
public function beSensitive(MyBaseClass $Character)
{
echo 'You are so ' . $Character->feelings . '!';
}
}
现在小猪可以感受到维尼的感觉了
$Pooh = new Pooh();
$Piglet = new Piglet();
$Piglet->beSensitive($Pooh);
友元函数允许定义二进制运算符,它们将私有数据合并到一对对象中。当使用C++的操作符重载特性时,这尤其强大。当我们研究重载时,我们将回到它。那么php和c中的friend函数有什么不同呢#