主页/PHP笔记/PHP问答/数据结构/如何在PHP中使用可见性(Public、Private、Protected)

如何在PHP中使用可见性(Public、Private、Protected)

Bug编译狮

Bug编译狮

在PHP中,可见性(public、private和protected)用于控制类成员的访问权限。这有助于组织代码,并确保类中的数据和方法只在预期的地方被访问。

公开(Public)

公有成员可以被任何地方访问,包括其他类、对象实例以及外部脚本。

class MyClass {
    public $publicVar = "This is a public variable.";

    public function publicMethod() {
        echo "This is a public method.";
    }
}

私有(Private)

私有成员只能在定义它们的类内部访问,不能被外部类、对象实例或者外部脚本访问。

class MyClass {
    private $privateVar = "This is a private variable.";

    private function privateMethod() {
        echo "This is a private method.";
    }
}

保护(Protected)

保护成员只能在定义它们的类内部访问,也可以在继承自该类的子类中访问。

class MyClass {
    protected $protectedVar = "This is a protected variable.";

    protected function protectedMethod() {
        echo "This is a protected method.";
    }
}

class SubClass extends MyClass {
    public function accessProtected() {
        echo $this->protectedVar; // 可以访问
        $this->protectedMethod(); // 可以调用
    }
}

示例代码

假设我们有一个User类,其中包含一些公共、私有和保护成员:

// User.php
class User {
    public $name;
    private $age;
    protected $email;

    // 构造函数
    public function __construct($name, $age, $email) {
        $this->name = $name;
        $this->age = $age;
        $this->email = $email;
    }

    // 公共方法
    public function introduce() {
        return "My name is {$this->name} and I am {$this->age} years old.";
    }

    // 私有方法
    private function calculateAgeInDays() {
        return $this->age * 365;
    }

    // 保护方法
    protected function getEmailDomain() {
        return substr($this->email, strpos($this->email, '@') + 1);
    }
}

我们可以创建一个Main类来测试这些成员:

// Main.php
require 'User.php';

$user = new User('John Doe', 30, 'john.doe@example.com');

echo $user->introduce(); // 输出: My name is John Doe and I am 30 years old.
echo $user->calculateAgeInDays(); // 输出: 这里没有实现计算年龄的方法
echo $user->getEmailDomain(); // 输出: example.com

在这个示例中,$name是公共的,可以在任何地方访问;$age是私有的,只能在User类内部访问;而$email是受保护的,只能在User类及其子类中访问。

黑板Bug讲师

黑板Bug讲师

概览

理解对象可见性对于正确进行面向对象编程至关重要。在PHP中,可见性指的是属性和方法在类内部如何访问。本教程将教你使用公共、私有和保护的关键字,这些关键字决定了PHP类中的访问控制级别。你将学习封装的基础知识,深入探讨每种可见性类型,并通过实际代码示例看到可见性如何影响你的PHP代码。

公共可见性

公开可见性意味着属性或方法可以从任何地方访问,包括类内部和外部。这是PHP默认为类成员设置的可见性,除非您显式地设置了不同的可见性级别。

这是一个基本的示例,展示了一个公共属性和方法:

<?php
class Car {
    public $color = 'red';

    public function getColor() {
        return $this->color;
    }
}

$myCar = new Car();
echo $myCar->getColor(); // Outputs: red
?>

这个简单的类有一个公共属性。$color并且有一个公共方法getColor()两者都可以从外部类之外访问,如实例化时所见。Car对象和调用getColor()方法。

私有可见性

私有访问级别仅允许定义该属性或方法的类内部进行访问。这意味着,您不能从类之外直接访问私有成员。这对于隐藏内部状态和不应该作为对象公开接口的一部分的帮助方法来说非常有用。

以下是一个私有可见性的示例:

<?php
class Car {
    private $color = 'red';

    private function setColor($color) {
        $this->color = $color;
    }

    public function getColor() {
        return $this->color;
    }
}

$myCar = new Car();
echo $myCar->getColor(); // Outputs: red
//$myCar->setColor('blue'); // Fatal error: Uncaught Error: Call to private method
?>

在更新后的Car对不起,我无法理解您的问题。如果您有其他的问题,请重新描述一下,我会很乐意帮助您。$color房地产和谈判。setColor()方法现在为私有。公开的方法getColor()仍然可以从外面访问,但您无法直接更改颜色属性。

受保护的可见性

保护的访问级别介于公共和私有之间。标记为protected的属性和方法可以在类内部、继承的类以及外部世界之外被访问。

你可以如何使用保护可见性(protected visibility)让子类访问其父类的属性或方法:

<?php
class Vehicle {
    protected $color;

    public function setColor($color) {
        $this->color = $color;
    }

    protected function getColor() {
        return $this->color;
    }
}

class Car extends Vehicle {
    public function revealColor() {
        return $this->getColor();
    }
}

$myCar = new Car();
$myCar->setColor('blue');
echo $myCar->revealColor(); // Outputs: blue
?>

对不起,我不太明白你在说什么。Vehicle对不起,我不太明白您的意思。$color它被保护,无法直接从实例访问。Car然而,因为Car它是超类的一个子类。Vehicle它可以访问受保护的方法。getColor()在其自身的方法中revealColor()好的,请提供需要翻译的内容。

高级用例

当你对PHP的可见性变得越来越熟悉时,可以在更高级别的场景下应用这些原则,例如在设计模式和框架中。以下是一些示例:

<?php
// ... 

use some design pattern;

class AdvancedExample extends SomePattern {
    // Implementation details
}

// ...
?>

高级用例通常涉及在抽象类和接口中使用受保护的可见性,这些实例需要严格定义的API。这些例子超出了初学者水平,进入了中级和高级PHP编程领域。

结论。

综上所述,PHP的可见性提供了保护对象完整性的方式,通过控制其状态和行为的访问来实现这一点。通过使用public、private和protected关键字,你可以构建一个强大的且安全的对象导向应用程序。请记住,在每个类的方法和属性中仔细考虑哪种可见性是最合适的,同时考虑到封装性和继承的原则。

长工码奴1523

长工码奴1523

在 PHP 中,public, privateprotected 是三种不同的访问级别,用于控制对象的可见性。

  1. public: 公有属性和方法:这些属性和方法可以在任何地方被直接访问,包括类外。它们是面向对象编程中的最常见模式之一。

  2. private: 私有属性和方法:这些属性和方法只能在该类内部访问,不能从外部访问。这是为了保护数据安全,并防止未授权的访问。

  3. protected: 可保护属性和方法:这些属性和方法既可以被该类内的方法访问,也可以被子类访问。这样可以实现多态性和继承。

示例代码

class MyClass {
    public $property;
    protected $protectedProperty;

    // 构造函数
    public function __construct($value) {
        $this->property = $value;
    }

    // 保护的方法
    public function protectedMethod() {
        echo "This is a protected method";
    }
}

// 创建实例
$myInstance = new MyClass(42);

// 访问私有属性
echo $myInstance->protectedProperty; // 输出: null (因为私有)

// 访问公有属性
echo $myInstance->property; // 输出: 42

// 调用保护方法
$myInstance->protectedMethod(); // 输出: This is a protected method

在这个例子中:

  • MyClass 实现了 public 属性和方法。
  • MyClass 的构造函数实现了 protected 方法。
  • MyClass 的公共属性 property 和私有属性 protectedProperty 都被正确地访问和处理。

通过这种方式,你可以根据需要选择适当的访问级别来控制对象的可见性。