文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

PHP 私有函数

2024-02-27 19:55

关注

如果某些属性或方法在 PHP 中被声明为 private 可见性关键字,则只能在其类中访问它。

Private 函数只能在定义它的类中访问,不能在类外访问。

使用 private 函数的一个主要缺点是子类不能继承这些函数。private 功能应正确使用。

本教程演示了 private 函数的用法。

示范 private 函数的使用

首先,我们将创建一个具有一个 private 和一个默认 public 方法的类。我们将调用 private 函数,然后退出类。

班上:

<?php
class test_private
{
    // Public constructor
    public function __construct() { }

    // Declaring a private method
    private function TestPrivate() {
    echo "Hello! this is private function declared in test_private class"; 
    }

    // Default is always public
    function test()
    {
        $this->TestPrivate();
    }
}
?>

在类外调用函数 TestPrivate()

<?php
$testclass = new test_private;
$testclass->TestPrivate(); // This will cause fatal error.
?>

输出:

PHP Fatal error: Uncaught Error: Call to private method test_private::TestPrivate() from context '' in /home/znhT6B/prog.php:22 Stack trace: #0 {main} thrown in /home/znhT6B/prog.php on line 22 

在类外调用函数 test()

$testclass = new test_private;
$testclass->test(); // this will run the private function because it is called inside the class

输出:

Hello! this is private function declared in test_private class

正如我们所看到的,当 private 函数仅在其类内部调用时才有效,在我们的代码中,我们创建了一个 public 函数测试来调用 private 函数,以便我们可以在类外部调用它。

演示在继承中使用 private 函数

不可能调用在子类中声明的 private 方法。私有方法只能在同一个类中调用。

参见示例:

<?php
class test_private2 extends test_private
{
    // This is default public
    function test2()
    {
        $this->TestPrivate(); 
    }
}
$testclass2 = new test_private2;
$testclass2->test2(); // this will generate the same error.
?>

Class test_private2 是第一个示例代码中给出的 test_private 类的子类。我们将类称为子类中的 private 函数。

输出:

Fatal error: Uncaught Error: Call to private method test_private::TestPrivate() from context 'test_private2' in C:\Apache24\htdocs\php private.php:25 Stack trace: #0 C:\Apache24\htdocs\php private.php(30): test_private2->test2() #1 {main} thrown in C:\Apache24\htdocs\php private.php on line 25

如果我们通过在子类中创建一个具有相同名称的新函数来覆盖 private 函数会怎样?答案是一旦声明了 private 函数,就不能在子类中覆盖它。

<?php
class Cars 
{
    public function test() {
        $this->test_public();
        $this->test_private();
    }
    public function test_public() {
        echo "This is public function from Cars class.";
		echo "<br>";
    }   
    private function test_private() {
        echo "This is private function from Cars class.";
		echo "<br>";
    }
}

class Bikes extends Cars 
{
    public function test_public() {
        echo "This is public function from Bikes class.";
		echo "<br>";
    }   
    private function test_private() {
        echo "This is private function from Bikes class.";
		echo "<br>";
    }
}
$mybike = new Bikes();
$mybike->test();
?>

上面的代码试图覆盖子类中的 privatepublic 函数,但只有 public 函数将被覆盖。

输出:

This is public function from Bikes class.
This is private function from Cars class.

正如我们从输出中看到的,私有函数没有被子类覆盖。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯