c# - php中的友元函数是什么?

标签 c# php

现在我听说了 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);  
        }  
    }  
} 

Link reference

关于c# - php中的友元函数是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21620975/

相关文章:

c# - 获取另一个 Exe 的 App.Config

c# - 压缩内存流但保留为流(不创建文件)?

php - 使用php脚本在csv文件中插入图像

php - `while (true)` 与 `while (\true)` 有什么区别?

c# - 如何将 Kendo 文本框控件绑定(bind)到它的数据?

c# - 如何仅获取 LocalUser 路径?

c# - 我可以或应该在 LINQ 查询中将两个 Where 子句连接在一起吗?

javascript - jquery,仅在显示其他内容时才显示

php - Laravel 4.2 Eloquent 关系

php - OFFSET OR LIMIT 在 Mysql 中高效