迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > PHP >

PHP 私有函数

作者:迹忆客 最近更新:2023/03/14 浏览次数:

如果某些属性或方法在 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.

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

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 PHP 中获取时间差的分钟数

发布时间:2023/03/29 浏览次数:183 分类:PHP

本文介绍了如何在 PHP 中获取时间差的分钟数,包括 date_diff()函数和数学公式。它包括 date_diff()函数和数学公式。

PHP 中的重定向

发布时间:2023/03/29 浏览次数:136 分类:PHP

本教程演示了如何将用户从页面重定向到 PHP 中的其他页面

PHP 分页

发布时间:2023/03/29 浏览次数:66 分类:PHP

本教程介绍如何在 PHP 中对数据库行进行分页

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便