我无法解释为什么这个脚本总是返回0.如果我将它更改为echo getSKU()它可以工作,但数量,价格或名称似乎永远不会起作用。如果有人有任何想法,请帮助这对我的生活感到恼火!
<?php
session_start();
$sku = "0001";
if (!isset($_SESSION[$sku])) {
$_SESSION[$sku] = new product($sku, 5);
} else {
}
echo $_SESSION[$sku]->getQuantity();
class product {
var $sku;
var $name;
var $price;
var $quantity;
function __construct($par1, $par2) {
$this->sku = $par1;
$this->quantity = $par2;
}
function setSKU($x) {
$this->sku = $x;
}
function getSKU() {
echo $this->sku;
}
function setName($x) {
$this->name = $x;
}
function getName() {
echo $this->name;
}
function setPrice($x) {
$this->price = $x;
}
function getPrice() {
echo $this->price;
}
function setQuantity($x) {
$this->quantity = $x;
}
function incrementQuantity() {
$this->quantity++;
}
function getQuantity() {
echo $this->quantity;
}
}
答案 0 :(得分:3)
您应该使用return
代替echo
。您的get...
- 方法目前不返回任何内容(只是隐式null
),它们只是echo
您想要返回的值。
要解决此问题,只需将每个get...
- 方法echo
替换为return
- 即
function getQuantity() {
return $this->quantity;
}
除此之外,你应该知道,你不能在$_SESSION
中存储对象(实际上你可以,但是你必须实现神奇的__sleep
和__wakeup
- 方法。 )。
您应该考虑将其产品存储在会话中的其他解决方案(即序列化它们)
答案 1 :(得分:1)
你不应该在get methodes中回显你的属性
echo $this->Variable;
你应该总是归还他们。
return $this->Variable;
return将程序控制返回给调用模块。执行 在被调用模块的调用
之后的表达式中继续
有关返回的更多信息,请查看文档here
答案 2 :(得分:0)
虽然其他答案中提出的问题一定要解决,但是为了回答你的问题我相信数量可能没有确定。你可以尝试添加这一行吗?
$_SESSION[$sku]->setQuantity(5);
$_SESSION[$sku]->getQuantity();