Вывод переменной из класса PHP

Я быстро осмотрел некоторые из похожих на мой вопрос вопросов, но ни один из ответов не затронул проблему, с которой я столкнулся.

У меня есть два файла. product.php а также index.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;

Я пробовал с разными способами включения файла (требуют, включают, включают в себя). Я не уверен, что это проблема.

Проблема, которую я получаю, заключается в том, что $ product-> var не выводится. Вместо этого я получаю следующую ошибку:

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

Я не совсем уверен, почему он считает эту переменную неопределенной. Я просмотрел документацию по PHP о классах и свойствах, но ничего, что действительно было похоже на ответ.

Последнее замечание: я пробовал это с классом, определенным в index.php, и он работал нормально. Это заставляет меня думать, что может быть что-то не так с моим путем к файлу, но имя файла написано правильно, и файлы находятся в тех же каталогах, поэтому я не совсем уверен.

4

Решение

Explainations

Прежде всего, в вашем классе вы указали переменную для вашего конструктора. Но эта переменная является обязательной (то есть значение по умолчанию отсутствует). Так при создании нового продукта вы должны указать.

Кроме того, если вы используете конструктор, нет необходимости присваивать переменной значение по умолчанию перед вызовом конструктора.

Тем не менее, если вы хотите получить доступ к своему значению без вызова метода, существует множество решений.

Решение 1: инстанцирование и прямой вызов переменной

class Product {

public $var = 'a default value';

}

$product = new Product();

echo $product->var;

Решение 2: использование средства доступа для получения защищенного / частного значения

class Product {

protected $var = 'a default value';

public function getVar() {

return $this->var;

}

}

$product = new Product();

echo $product->getVar();

Решение 3: использование конструктора для инициализации значения

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();

Решение 4: использование статической переменной

class Product {

public static $var = 'a default value';

}

echo Product::$var;

Решение 5: использование статического метода с защищенным статическим значением

class Product {

protected static $var = 'a default value';

public static function getVar() {

return self::$var;

}

}

echo Product::getVar();

Документация

PHP: классы и объекты.

PHP: видимость.

PHP: статический.

PHP: конструкторы и деструкторы.

1

Другие решения

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

public function __construct($var){
$this->var = $var;
}

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

require_once("product.php");
$product = new Product('Product Name');
echo $product->displayVar();
1

class Product{
protected $var;

public function __construct($var = "a default value"){
$this->var = $var;
}

public function getVar(){
return $this->var;
}
}

$product = new Product();
echo $product->getVar();
  • Вы должны дать оценку на new Product('your value'), ваш пример не имеет значения, которое дано конструктору
  • Свяжите это правильно, не $var=$var делать $this->var=$var
  • Установить значение по умолчанию в __construct($var = "a default value")лучше, чем непосредственно на имущество
  • Сделать переменную protected не public иначе не нужен геттер и переменная может быть изменена извне напрямую
  • создать getter для переменной, которая возвращает значение, а не echo Это.

Это оно.

1

В вашем конструкторе у вас есть это:

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

Измените это на:

    public function __construct($var){
$this->var = $var;
}

в настоящее время он просто устанавливает переданную переменную себе.

Во-вторых, в вашем файле index.php вы создаете такой объект:

$product = new Product();

поскольку ваш конструктор ожидает получения некоторой переменной, вы всегда должны предоставлять ее.
Например:

$product = new Product('new text');

Я вижу, что у вас есть метод для отображения переменной. Это хорошо, хотя обычным делом является создание такой переменной как protected а затем создание public getter метод доступа к защищенным переменным извне класса.
Затем вы можете просто вызвать свой метод из файла index.php следующим образом:

$product->displayVar();

или создайте метод get, который вернет вашу переменную и отобразит ее в файле index.php.
например.

/**product.php**/
public function getVariable() {
return $this->var;
}/**index.php**/
$product = new Product('new text');
echo $product->getVariable();

Это зависит от того, нужно ли вам отображать эту переменную или вы знаете, что эта переменная вам понадобится для других целей. В любом случае, я думаю, что создавать геттер лучше и из-за хорошей привычки.

Я надеюсь, что это помогает. Удачи!

1

у тебя есть

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

должно быть:

public function __construct($var){
$this->var = $var;
}
0

Пожалуйста, измените ваш код, как это

product.php

<?php class Product{
public $var ;
public function __construct($var){
$this->var = $var;
} } ?>

index.php

<?php require_once 'product.php';
$product = new Product('a default value');
echo $product->var; ?>

Это может помочь вам.

Спасибо

0
По вопросам рекламы [email protected]