Question

I'm a newbie in PHP declaration and i don't understand how to have an array inside an ArrayObject. The following code is working (echo are ok) but i have some "SCREAM: Error suppression ignored for" because "Warning: Creating default object from empty value in... line 11" and "Warning: Creating default object from empty value in ... on line 13"

I do :

$model = new stdClass();
$model->name = new stdClass();
$model->image = new ArrayObject();
$model->image->url = new stdClass();
$model->image->copyright = new stdClass();
$model->image->total = new stdClass();

$model->name = "France";
echo "Name : ".$model->name."<hr/>";
$model->image[0]->url = "/model1.jpg";
$model->image[0]->copyright = "Bellami";
$model->image[1]->url = "/model2.jpg";
$model->image[1]->copyright = "Bellami";
$model->image->total=2;

echo "Image 1 : ".$model->image[0]->copyright." - ".$model->image[0]->url."<hr/>";
echo "Image 2 : ".$model->image[1]->copyright." - ".$model->image[1]->url."<hr/>";

How must be the declarations in my case ?

Was it helpful?

Solution

This works for me, but I suspect there is a better approach:

$model = new stdClass();
$model->name = new stdClass();
$model->image = new ArrayObject();
$model->image->offsetSet( 0, new ArrayObject());
$model->image->offsetSet( 1, new ArrayObject());

$model->name = "France";
echo "Name : ".$model->name."<hr/>";
$model->image[0]->offsetSet( 'url', "/model1.jpg");
$model->image[0]->offsetSet( 'copyright', "Bellami");
$model->image[1]->offsetSet( 'url', "/model2.jpg");
$model->image[1]->offsetSet( 'copyright', "Bellami");
$model->image->total=2;

echo "Image 1 : ".$model->image[0]->offsetGet('copyright')." - ".$model->image[0]->offsetGet('url')."<hr/>";
echo "Image 2 : ".$model->image[1]->offsetGet('copyright')." - ".$model->image[1]->offsetGet('url')."<hr/>";

OTHER TIPS

Why would you need to declare the object, its implicitly defined... Would this give you what you require on its own?

$model->image[0]->url = "/model1.jpg"; 
$model->image[0]->copyright = "Bellami"; 
$model->image[1]->url = "/model2.jpg"; 
$model->image[1]->copyright = "Bellami"; 

var_dump($model);

$model->image[0] is never created, but spoken to like an object. This works:

$model->image[0] = new ArrayObject();
$model->image[0]->url = "/model1.jpg";
$model->image[0]->copyright = "Bellami";
$model->image[1] = new ArrayObject();
$model->image[1]->url = "/model2.jpg";
$model->image[1]->copyright = "Bellami";
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top