【问题标题】:Passing new elements to an array within class and returning its values将新元素传递给类中的数组并返回其值
【发布时间】:2017-05-23 22:41:27
【问题描述】:
class Item 
{
private $_SomeArray = array();
private $elementOfanArray;

function __construct()
{
    $this->_SomeArray[0]="default message";
    $this->elementOfanArray=0;    //I am trying to assign empty value to an var
}

public function getArray()
{
    return $this->SomeArray;  //function returning whole array
}
public function setArray(elementOfanArray)  //function for adding new element to an array and checking if not empty
{
if(!elementOfanArray)
    {

    }
else
    {
        array_push($_SomeArray, elementOfanArray);

        $elementOfanArray = 0; //I am trying to assign value after addding element to an array
    }
}


function __destruct(){
    $this->_SomeArray;
    $this->elementOfanArray;
}
}

这是我的代码,但现在我想知道使用“array_push”是否是正确的选择,因为它会被调用大约 20 次。 函数调用的数量不是恒定的,所以如果值更少..我想从数组中删除它们或立即转储它们。

我得到的另一个问题是我应该如何将我的元素从这个类中取出,有没有办法让整个数组的值在这个类之外?

我写的对吗?

【问题讨论】:

  • 如果您在该类或函数中从您的类中调用变量,则需要使用$this->

标签: php arrays function class variables


【解决方案1】:

回答您关于使用array_push 的第一个问题:使用它的次数并不重要,它的作用是向数组中添加一个项目。所以使用它!

您也可以使用这种语法$array[] = 'value',它也可以做同样的事情。

几点说明:

1) php 中的变量名必须以$ 开头。您的代码中有几个地方没有它们,例如:

public function setArray(elementOfanArray)

if (!elementOfanArray) {

2) 函数中使用的名称 SomeArray 与构造函数中使用的名称 _SomeArray 之间存在命名不一致。

3) 由于_SomeArray 是类的属性,您需要在 setArray 函数中使用$this->_SomeArray 访问它:

array_push($this->_SomeArray, $elementOfanArray);

4) 使用析构函数来清除局部变量确实没有任何价值,当对象被销毁时它们将被取消设置。通常,您会使用析构函数来执行关闭连接、保存状态等操作。 目前,您似乎会像这样使用您的课程:

$myItem = new Item();

$myItem->setArray('Array Item #1');
$myItem->setArray('Array Item #2');
$myItem->setArray('Array Item #3');

$array = $myItem->getArray();

var_dump($array);
// returns:
//
// array(4) {
//     [0]=>
//   string(15) "default message"
//     [1]=>
//   string(13) "Array Item #1"
//     [2]=>
//   string(13) "Array Item #2"
//     [3]=>
//   string(13) "Array Item #3"
// }

5) 我不确定你对 elementOfanArry 类属性的意图是什么:

$this->elementOfanArray = 0;    //I am trying to assign empty value to an var

如果您认为因为setArray() 方法接受参数而需要它,那么情况并非如此。

总而言之,为了简单地解决您帖子的标题“将新元素传递给类中的数组并返回其值”,代码可能如下所示:

class Item
{
    private $_SomeArray = array();

    function __construct()
    {
        $this->_SomeArray[0] = "default message";
    }

    public function getArray()
    {
        return $this->_SomeArray;  //function returning whole array
    }

    public function setArray($elementOfanArray)  //function for adding new element to an array and checking if not empty
    {
        if (!$elementOfanArray) {

        } else {
            array_push($this->_SomeArray, $elementOfanArray);
            // or use:
            // $this->_SomeArray[] = $elementOfanArray;
        }
    }
}


$myItem = new Item();

$myItem->setArray('Array Item #1');
$myItem->setArray('Array Item #2');
$myItem->setArray('Array Item #3');

$array = $myItem->getArray();

【讨论】:

  • 很好地回答了我提到的各个方面的问题。感谢您的意见:)。
  • 我将 elementOfanArray 设置为 0 的目的是为了防止以空值调用函数而不使数组变大。有可能我什至不能在不传递变量的情况下调用函数,所以它可能没用。
  • 这不是一个坏主意,但是在您当前的代码中,您根本没有在任何地方使用该变量。我认为您可能将它与 setArray() 方法中具有相同名称的参数混淆了。
  • 我没有看到 elementOfanArray 在您的代码中声明。应该是这样的吗?
  • 这是正确的。您不需要在函数之外声明它。我想您可以说它是在您列出作为函数声明中的参数时声明的。 public function setArray($elementOfanArray)
猜你喜欢
  • 2014-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-12
  • 1970-01-01
  • 1970-01-01
  • 2020-08-19
  • 1970-01-01
相关资源
最近更新 更多