-3

假设我有以下课程:

class Item{
    public $itemid;
    public $itemattribute;

    function __construct($itemid){
        $this->itemid = $itemid;
    }
    public function getData(){
        $this->itemattribute = foo($itemid);
    }
}

然后我用这段代码启动一个新对象:

$item = New Item($itemid);
$item->getData();
var_dump($item);

基本上我想要做的是定义$itemid当我初始化对象时,当我调用时$item->getData,让它执行该功能,使用之前定义的$itemid. 这是我的第一堂课,并尝试从头开始编写 OOP,所以请耐心等待。问题是没有$itemid被传递给foo.getData

4

5 回答 5

2

要在函数中调用 itemid,只需将其加载到函数中即可。

class Item{
 public $itemid;
 public $itemattribute;

 function __construct($itemid){
    $this->itemid = $itemid;
 }
 public function getData(){
    $itemid = $this->itemid; // or 
    // simply. do  what ever you want to itemid
    $this->itemid;

   return  $this->itemattribute = foo('bar');
   // you should have return

 }
}
于 2013-05-02T15:20:42.953 回答
1

您需要使用$this->itemid而不是$itemidgetData函数中提取值,以便将值“传递”给函数:

class Item{
    public $itemid;
    public $itemattribute;

    function __construct($itemid){
        $this->itemid = $itemid;
    }
    public function getData(){
        // echo $this->itemid; // This will print the same value you passed to the constructor
        $this->itemattribute = foo( $this->itemid); // <-- HERE
    }
}

请注意,如果您期望来自 的值,则getData()需要返回一些内容:

public function getData(){
    $this->itemattribute = foo( $this->itemid);
    return $this->itemattribute;
}
于 2013-05-02T15:17:08.813 回答
1

创建对象后:

$item = New Item($itemid);

$item->itemid$itemid根据您的构造函数取值。

所以只需$item->itemid在你的getData()方法中使用

于 2013-05-02T15:19:58.433 回答
1

该方法似乎是正确的(除非您需要使用 $this-> 来访问该属性),但是: 自己尝试一下,看看 getter 和 setter 是如何正常使用的。getter 应该返回一些东西,而 setter 应该设置一些东西。如果你需要在内部做“某事”,你应该使用另一种方法,甚至在构造函数中做,等等。

class Item{
    public $itemid;
    public $itemattribute;

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

    public function getItemId(){
        return $this->itemid;
    }

    //option 1:) 
    public function calculateAttributeValue(){
       $this->itemAttribute = foo($this->itemid);
    }

    //option 2:)
    public function calculateAttributeValue($func){
       $this->itemAttribute = $func($this->itemid);
    }

    //option 3:) (lazy loading)
    public function getItemAttribute(){
       if ($this->itemAttribute == null){
           $this->itemAttribute = foo($this->itemid);
       }

       return $this->itemAttribute;
    }

    //option 4 (eager loading)
    function __construct($itemid){
        $this->itemid = $itemid;
        $this->itemAttribute = foo($this->itemid);
    }

    public function getItemAttribute(){
       return $this->itemAttribute;
    }
}

然而,使用急切或延迟加载是一个好主意。每当您需要“调用”另一个函数来计算一个值时,在 getter 将返回一个值之前,您的设计对“以正确的顺序调用函数”变得敏感,这对大型类不利,甚至更糟,如果一个计算依赖于之前完成的另一个计算......

不好的用法:

$myClass = new Item(5);
$myClass->CalulateA();
$myClass->CalculateB();
$myClass->getB();

更好的:

$myClass = new Item(5); //calculates A and B
$myClass->getB();

或者

$myClass = new Item(5);
$myClass->getA(); //calculates A.
$myClass->getB(); //calculates B and A when required.
于 2013-05-02T15:21:48.393 回答
-1
public function getData(){
    return $this->item_id;
}

这将返回类的项目 id

于 2013-05-02T15:16:04.760 回答