Harry_J
Harry_J

Reputation: 33

PHP array is null after passing to function

So I have a problem I have an array that is passes to setData function after that I call getE that suppose to return the array but instead I'm getting Null what am I doing wrong?

<?php

class Se {      
    public $data1; 

    public function setData(array $data){
        if (empty($data)) {
        throw new InvalidArgumentException('The name of an employee cannot be empty.');
     }

    $data1 = $data;
        $data1 =  array_values($data1);
        var_dump($data1);   
    }


    public function getE(){ 
        return $data1[0];
    }
}

$tmpaaa= array('3333','222');
$ttt = new Se();
$ttt->setData($tmpaaa);

echo $ttt->getE();

So my revised code looks like this now

class Se {

    public $data1; 

public function setData(array $data)
{

if (empty($data)) 
{
throw new InvalidArgumentException('The name of an employee cannot be empty.');
 }
     $this->data1 = $data;     

}


    public function getE()
{   
return $this->$data1[0];

}



 };
$tmpaaa= array('3','2');
 $ttt = new Se();
$ttt->setData($tmpaaa);
echo $ttt->getE();
 ?>

Upvotes: 0

Views: 1115

Answers (2)

xlordt
xlordt

Reputation: 521

It is also recommended not closing the php tag in a class file, this prevents space issues.

<?php
class Se {      

    public $data1; 

    public function setData(array $data)
    {
        if (empty($data)) 
        {
            throw new InvalidArgumentException('The name of an employee cannot be empty.');
        }

        $this->data1 = array_values($data);  //you error was here, no need to to assign $data twice so I deleted top line.
    }


    public function getE()
    { 
        return $this->data1[0];

    }
}

$tmpaaa = array('3333','222');
$ttt = new Se();
$ttt->setData($tmpaaa);

echo $ttt->getE();

Upvotes: 1

Phil
Phil

Reputation: 164796

In order to access class instance properties from within the class, you need to prefix the variable name with $this. See http://php.net/manual/language.oop5.properties.php

To fix your problem, change this in setData

$data1 = $data;
$data1 =  array_values($data1);
var_dump($data1);   

to this

$this->data1 = array_values($data);
var_dump($this->data1);

and getE to

public function getE(){ 
    return $this->data1[0];
}

Update

As it appears the $data1 property is required in Se, I'd set it in the constructor, eg

public function __construct(array $data) {
    $this->setData($data);
}

and instantiate it with

$ttt = new Se($tmpaaa);
echo $ttt->getE();

Upvotes: 3

Related Questions