php private怎么调用

fiy 其他 214

回复

共3条回复 我来回复
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    private 关键字用来声明类的私有成员或方法,私有成员或方法只能在类的内部访问,不能在类的外部直接访问。

    在 PHP 中,调用 private 成员或方法有以下几种方式:

    1. 在类的内部调用私有成员或方法:由于私有成员或方法只能在类的内部访问,所以在类的内部可以直接使用 private 成员或方法,无需特殊操作。

    示例:

    “`php
    class Example {
    private $name = “John”; // 私有成员

    private function sayHello() { // 私有方法
    echo “Hello, ” . $this->name;
    }

    public function printName() {
    echo $this->name;
    }

    public function greet() {
    $this->sayHello(); // 在类的内部调用私有方法
    }
    }

    $example = new Example();
    $example->printName(); // 输出 “John”
    $example->greet(); // 输出 “Hello, John”
    “`

    2. 在类的外部调用私有成员或方法:由于私有成员或方法无法直接在类的外部访问,所以需要通过公有方法来间接访问私有成员或方法。

    示例:

    “`php
    class Example {
    private $name = “John”; // 私有成员

    private function sayHello() { // 私有方法
    echo “Hello, ” . $this->name;
    }

    public function printName() {
    echo $this->name;
    }

    public function greet() {
    $this->sayHello(); // 在类的内部调用私有方法
    }
    }

    $example = new Example();
    $example->printName(); // 输出 “John”
    $example->greet(); // 输出 “Hello, John”
    “`

    通过以上两种方式,可以在 PHP 中调用 private 成员或方法。尽管 private 成员或方法无法直接在类的外部访问,但通过公有方法可以间接访问私有成员或方法,从而实现对私有成员或方法的调用。

    2年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    PHP私有成员可以通过类的内部调用,也可以通过魔术方法进行访问和调用。

    1. 类内部调用私有成员:在类的内部,可以直接调用私有成员,不需要额外的操作。私有成员只能被类的内部访问和调用,外部无法访问。

    例如:
    “`php
    class MyClass {
    private $privateVariable = “私有变量”;
    private function privateMethod() {
    echo “私有方法”;
    }

    public function publicMethod() {
    $this->privateMethod(); // 在类的内部调用私有方法
    echo $this->privateVariable; // 在类的内部访问私有变量
    }
    }

    $obj = new MyClass();
    $obj->publicMethod(); // 输出:私有方法 私有变量
    “`

    2. 魔术方法调用私有成员:PHP提供了一些魔术方法,如`__get()`和`__set()`,可以通过这些魔术方法访问和调用私有成员。

    例如:
    “`php
    class MyClass {
    private $privateVariable = “私有变量”;

    public function __get($name) {
    if ($name === ‘privateVariable’) {
    return $this->privateVariable; // 返回私有成员的值
    }
    }

    public function __set($name, $value) {
    if ($name === ‘privateVariable’) {
    $this->privateVariable = $value; // 设置私有成员的值
    }
    }
    }

    $obj = new MyClass();
    echo $obj->privateVariable; // 输出:私有变量
    $obj->privateVariable = “新的值”;
    echo $obj->privateVariable; // 输出:新的值
    “`

    3. 使用公有方法间接调用私有成员:私有成员通常通过公有方法间接访问和调用。在公有方法中可以使用私有成员,这样外部就可以通过调用公有方法间接获取或修改私有成员的值。

    例如:
    “`php
    class MyClass {
    private $privateVariable = “私有变量”;

    public function getPrivateVariable() {
    return $this->privateVariable; // 获取私有变量的值
    }

    public function setPrivateVariable($value) {
    $this->privateVariable = $value; // 设置私有变量的值
    }
    }

    $obj = new MyClass();
    echo $obj->getPrivateVariable(); // 输出:私有变量
    $obj->setPrivateVariable(“新的值”);
    echo $obj->getPrivateVariable(); // 输出:新的值
    “`

    4. 使用静态方法调用私有成员:私有成员还可以通过静态方法间接访问和调用。静态方法是属于类的方法,可以使用类的私有成员。

    例如:
    “`php
    class MyClass {
    private static $privateVariable = “私有静态变量”;

    private static function privateMethod() {
    echo “私有静态方法”;
    }

    public static function publicMethod() {
    self::privateMethod(); // 在类的静态方法中调用私有静态方法
    echo self::$privateVariable; // 在类的静态方法中访问私有静态变量
    }
    }

    MyClass::publicMethod(); // 输出:私有静态方法 私有静态变量
    “`

    5. 使用反射机制调用私有成员:PHP提供了反射机制,可以动态地获取和调用类的私有成员。通过反射可以绕过访问控制符的限制,访问和调用私有成员。

    “`php
    class MyClass {
    private $privateVariable = “私有变量”;

    private function privateMethod() {
    echo “私有方法”;
    }
    }

    $obj = new MyClass();

    $reflectionObj = new ReflectionClass($obj);
    $privateVariable = $reflectionObj->getProperty(‘privateVariable’);
    $privateVariable->setAccessible(true); // 设置为可以访问私有成员
    echo $privateVariable->getValue($obj); // 输出:私有变量

    $privateMethod = $reflectionObj->getMethod(‘privateMethod’);
    $privateMethod->setAccessible(true); // 设置为可以访问私有成员
    $privateMethod->invoke($obj); // 输出:私有方法
    “`

    2年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    PHP的private关键字用于定义私有成员和方法,私有成员和方法只能在类的内部访问,无法在类的外部直接调用。但是,在类的内部可以通过public或protected方法间接访问私有成员和方法。

    调用private成员和方法有两种方式:
    1. 使用public方法间接访问私有成员和方法
    2. 使用静态方法访问私有成员和方法

    下面将分别讲解这两种方式的操作流程和具体实现。

    1. 使用public方法间接访问私有成员和方法

    使用public方法来间接访问私有成员和方法是最常见和推荐的方式。在public方法中,可以调用私有成员和方法,并通过返回值或者输出的方式将私有成员和方法的结果返回给外部调用者。

    下面是一个示例代码:

    “`php
    class MyClass {
    private $privateMember = “私有成员”;

    private function privateMethod() {
    echo “私有方法”;
    }

    public function publicMethod() {
    echo $this->privateMember;
    $this->privateMethod();
    }
    }

    $obj = new MyClass();
    $obj->publicMethod(); // 输出:私有成员 私有方法
    “`

    在上面的示例中,MyClass类中定义了一个私有成员privateMember和一个私有方法privateMethod。使用public方法publicMethod间接访问私有成员和方法,通过`$this->privateMember`和`$this->privateMethod()`来访问私有成员和方法。

    2. 使用静态方法访问私有成员和方法

    除了使用public方法间接访问私有成员和方法,还可以使用静态方法来访问私有成员和方法。在静态方法中,可以使用`self`关键字来引用当前类的私有成员和方法,并将结果返回给外部调用者。

    下面是一个示例代码:

    “`php
    class MyClass {
    private static $privateStaticMember = “私有静态成员”;

    private static function privateStaticMethod() {
    echo “私有静态方法”;
    }

    public static function publicStaticMethod() {
    echo self::$privateStaticMember;
    self::privateStaticMethod();
    }
    }

    MyClass::publicStaticMethod(); // 输出:私有静态成员 私有静态方法
    “`

    在上面的示例中,MyClass类中定义了一个私有静态成员privateStaticMember和一个私有静态方法privateStaticMethod。使用静态方法publicStaticMethod访问私有静态成员和方法,通过`self::$privateStaticMember`和`self::privateStaticMethod()`来访问私有静态成员和方法。

    总结:
    通过public方法或静态方法可以间接访问private成员和方法,将private成员和方法的结果返回给外部调用者。这样可以保证类的封装性和安全性,同时也方便了代码的使用和维护。

    2年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部