首页 > 解决方案 > 我对访问 php 中的类以在 OOP 中回显数据感兴趣?

问题描述

在面向对象编程中,如何在 php 中的类中回显数据?如果它是正确的,这是我正在编写的以下代码。每当我回显它时,我都会遇到意外的“$name”期望函数错误:

class person{
    $name;
    $email;
}

$person1-> new person;

$person1-> $name='Eliot';

echo $person1->$name;

标签: phpoop

解决方案


首先,你的代码语法错误,试试这个:

<?php

class person{
    private $name;
    private $email;    
}

$person1 =new person;

$person1->name='Eliot';

echo $person1->name;

如果你执行代码,你会得到一个错误:

致命错误:未捕获的错误:无法访问私有财产 person::$name in [...]

这意味着,属性名称不可访问。你必须添加getter和setter。

最好的方法是使用魔术方法 __get__set,所以你的代码看起来像:

<?php

class person{
    private $name;
    private $email;


    public function __get($property){
        return $this->$property;
    }


    public function __set($property, $value){
         $this->$property=$value;
    }

}

$person1 =new person;

$person1->name='Eliot';

echo $person1->name; // output Eliot

为了解释更多,一般来说,在所有其他语言上,如果您将属性声明为私有或受保护,则必须声明 get 和 setter 才能访问这些变量,除非不是公共的。所以请看下面的例子:

class person{
    private $name;

    public function getName(){
        return $this->name;
    }

    public function setName($newname){
        $this->name=$newname ;
    }

}

$person1 =new person;

$person1->setName('Eliot');

echo $person1->getName(); // output  Eliot

这是一种优于其他语言的常用方法,但在 PHP 中,还有另一种方法可以做到这一点,如果你问我这种方法可以帮助我们什么,而不是常用方法。我可以告诉你一个例子,如果你有一个有 10 个私有属性的类,你必须创建 10 个 getter 和 10 个 setter(这是常见的方法),但是在 php 中使用魔法方法,你只需要创建一个 getter __get和一个 setter __设置(在这里查看更多魔术方法)

这是秘密:

$person = new Person();
$person->$name = "Denba"; 

后面,PHP知道你要设置对象person的属性名,就像你做的那样

$person->setName('Denba');

所以,因为类的所有属性只有一个 setter,所以你的 __set 方法应该有你想要更新的属性作为参数,然后是你想要放入的值。

还有另一个问题,如果你问我如果我尝试更新一个不存在的属性会怎样:

$person->xxx = "Denba"; // xxx does not exist on the class 

这不会破坏您的脚本,如果您尝试访问:

$person->xxx // this will return Denba

一种在更新属性是否存在之前验证的干净方法,您可以将__set更新 为:

public function __set($property , $value){
        if(property_exists($this, $property)){
         $this->$property = $value;       
        }
}

__get :

public function __get($property){
     if(property_exists($this, $property)){
    return $this->$property;
     }
}

希望这对您有所帮助。

享受伟大的 PHP 。


推荐阅读