foreach

php定义空对象
有时候我们直接对不存在的数组直接定义其下标的值,不会报错,但是我们定义不存在的对象的时候,就会报错,这个时候我们定义一个空对象即可.有以下三种方法:



<?php
$obj1 = new \stdClass; // Instantiate stdClass object
$obj2 = new class{}; // Instantiate anonymous class
$obj3 = (object)[]; // Cast empty array to object



var_dump($obj1); // object(stdClass)#1 (0) {}
var_dump($obj2); // object(class@anonymous)#2 (0) {}
var_dump($obj3); // object(stdClass)#3 (0) {}



PHP中的foreach作为经常用到的函数,常常用来遍历数组,对于数组中的元素是值的情形(如一般常见型的数组),foreach只是将数组中的每份元素的值拷贝到each后面的变量,



也就是对值本身的拷贝,对其值进行改变并不会影响到数组本身。



但是如果是对象数组的情形,也就是数组元素均为对象时,此时each后面的变量是对对象引用的拷贝,对其进行的改变会直接影响到原数组本身。这点与上面情形很容易弄混。

https://segmentfault.com/a/1190000014126990



https://www.php.net/manual/zh/control-structures.foreach.php



<?php



$a=[“a”=>”a”,”b”=>”b”];



$c=[“c”=>$a];
$d=new class{};
//$d->d=”12”;



class E{
private $f;
public function setF(){
$this->f=”setF”;
}
public function getF(){
return $this->f;
}
}



$e=new E;
foreach($a as $k=>$v){
$v=”12”;
}



var_dump($a);



foreach($c as $k=>$v){
$v[‘a’]=23;
}



$c[‘b’]=new E;



var_dump($c);
var_dump($d);
var_dump($e);
$e->setF();
var_dump($e);



foreach($c as $k => $v){
if($k==”b”){
$v->setF();
}
}



var_dump($c);
var_dump($c[‘b’]->getF());



array(2) {
[“a”]=>
string(1) “a”
[“b”]=>
string(1) “b”
}
array(2) {
[“c”]=>
array(2) {
[“a”]=>
string(1) “a”
[“b”]=>
string(1) “b”
}
[“b”]=>
object(E)#3 (1) {
[“f”:”E”:private]=>
NULL
}
}
object(class@anonymous)#1 (0) {
}
object(E)#2 (1) {
[“f”:”E”:private]=>
NULL
}
object(E)#2 (1) {
[“f”:”E”:private]=>
string(4) “setF”
}
array(2) {
[“c”]=>
array(2) {
[“a”]=>
string(1) “a”
[“b”]=>
string(1) “b”
}
[“b”]=>
object(E)#3 (1) {
[“f”:”E”:private]=>
string(4) “setF”
}
}
string(4) “setF”


Category php