从包含文件调用私有或受保护的方法

发布于 2024-11-16 05:36:08 字数 655 浏览 4 评论 0原文

myclass.php

class myclass {

private $name;

public function showData(){
    include_once "extension.php";

    otherFunction($this);

}

private function display(){
    echo "hello world!";
}

}

extension.php

function otherFunction($obj){

    if(isset($obj){
   $obj->display();
    }

}

好的,这就是问题所在,对于你们中的一些人来说,很明显我正在调用私有方法显然会引发错误的包含文件。我的问题是:

1。有没有办法包含文件 可以使用外部函数来调用 私有方法?

2.我如何使用包含的文件 访问私有方法并通过执行 所以将我的功能扩展到另一个 文件而不使我的类文件如此 功能繁多,臃肿不堪?

3.这可能吗?

谢谢

myclass.php

class myclass {

private $name;

public function showData(){
    include_once "extension.php";

    otherFunction($this);

}

private function display(){
    echo "hello world!";
}

}

extension.php

function otherFunction($obj){

    if(isset($obj){
   $obj->display();
    }

}

Ok, so this is the issue, for some of you it is obvious that I am calling a private method from an include file which obviously will throw an error. My question is:

1. Is there a way that an include file
can use external functions to call
private methods?

2. How could I use an included file to
access private methods and by doing
so extending my functions to another
file without making my class file so
bloated with many functions?

3. Is that even possible?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

薆情海 2024-11-23 05:36:08

如果您使用 PHP 5.3,这是可能的。

这就是所谓的反射。根据您的需要,您需要 ReflectionMethod

https://www.php.net/manual/ en/class.reflectionmethod.php

这是一个示例

<?php

//  example.php
include 'myclass.php';

$MyClass = new MyClass();

//  throws SPL exception if display doesn't exist
$display = new ReflectionMethod($MyClass, 'display');

//  lets us invoke private and protected methods
$display->setAccesible(true);
    
//  calls the method
$display->invoke();

}

,显然您需要将其包装在 try/catch 块中以确保异常得到处理。

If you're working with PHP 5.3 yes this is possible.

It's called Reflection. For your needs you want ReflectionMethod

https://www.php.net/manual/en/class.reflectionmethod.php

Here's an example

<?php

//  example.php
include 'myclass.php';

$MyClass = new MyClass();

//  throws SPL exception if display doesn't exist
$display = new ReflectionMethod($MyClass, 'display');

//  lets us invoke private and protected methods
$display->setAccesible(true);
    
//  calls the method
$display->invoke();

}

Obviously you'll want to wrap this in a try/catch block to ensure the exception gets handled.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文