php - 从 PHP 类回显变量

标签 php class oop properties

我快速浏览了一些与我的问题类似的问题,但没有一个答案完全触及我遇到的问题。

我有两个文件。 product.phpindex.php。 Product.php 定义了产品类,我只是使用 index.php 作为页面来输出变量。理想情况下,这将用于将来输出来自不同类的对象。

product.php

class Product{
    public $var = "a default value";

    public function __construct($var){
        $var = $var;
    }

    public function displayVar(){
        echo $this->var;
    }
}

index.php(全部包含在 php 标签中)

require_once("product.php");
$product = new Product();
echo $product->var;

我尝试了不同的包含文件的方法(require、include、include_once)。我不确定这是否是问题所在。

我遇到的问题是 $product->var 没有输出。相反,我收到以下错误:

Notice: Undefined property: Product::$var in C:\xampp\htdocs\FurnitureWebsite\index.php on line 21

我不完全确定为什么它认为这个变量未定义。我查看了有关类和属性的 PHP 文档,但没有找到真正的答案。

最后一点:我用 index.php 中定义的类试过了,效果很好。这让我觉得我的文件路径可能有问题,但文件名拼写正确,文件位于同一目录中,所以我不太确定。

最佳答案

解释

首先,在您的类中,您为构造函数指定了一个变量。但是,这个变量是强制性的(意思是,没有默认值)。因此,在实例化新产品时,您必须提供一个值

此外,如果您使用的是构造函数,则无需在调用构造函数之前为变量提供默认值。

也就是说,如果您想在不调用方法的情况下访问您的值,有很多解决方案。

方案一:实例化直接调用变量

class Product {

    public $var = 'a default value';

}

$product = new Product();

echo $product->var;

解决方案 2:使用访问器获取 protected /私有(private)值

class Product {

    protected $var = 'a default value';

    public function getVar() {

        return $this->var;

    }

}

$product = new Product();

echo $product->getVar();

方案三:使用构造函数初始化值

class Product {

    protected $var;

    public function __construct($var = 'a default value') {

        $this->var = $var;

        /* $this->var stands for protected $var */

        /* $var stands for... $var in the parameters */

    }

    public function getVar() {

        return $this->var;

    }

}

$product = new Product(); /* no value, so $var = 'a default value'; */

echo $product->getVar();

方案四:使用静态变量

class Product {

    public static $var = 'a default value';

}

echo Product::$var;

解决方案 5:使用具有 protected 静态值的静态方法

class Product {

    protected static $var = 'a default value';

    public static function getVar() {

        return self::$var;

    }

}

echo Product::getVar();

文档

PHP : classes and objects .

PHP : visibility .

PHP : static .

PHP : constructors and destructors .

关于php - 从 PHP 类回显变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41261213/

相关文章:

java - 从 ImageJ 插件动态加载类

c++ - 调用构造函数出错

php - 数据库和PHP未连接到phpMyAdmin(基本代码)

php - Symfony 4 服务依赖注入(inject)——构造函数与方法

javascript - XSLT+JavaScript : using classes

oop - 将接口(interface)的定义与其实现分离

java - 如何决定创建一个新的子类

c# - 构造函数应该解析输入吗?

php - PHP 中的自动 CSS 版本控制?

php - 低效的 SQL 查询