对象的遍历
对于对象的"所有属性", 我们同样可以使用foreach属性来对其进行遍历。
注意:1 遍历同样需要考虑其属性的可访问性;
2 只能遍历属性, 不能遍历方法。
<?php
class A{
public $p1 = 1;
protected $p2 = 2;
private $p3 = 3;
static $p4 = 4;
function ShowAllProperty($obj1){
foreach($obj1 as $key => $value){
echo "<br />$key : $value";
}
}
}
$obj1 = new A();
//对象遍历是,$key代表对象的属性名,
//$value代表对应的属性值
//静态方法必须用类名访问
foreach($obj1 as $key => $value){
echo "<br />$key : $value"; //遍历出 1
}
echo "<hr />";
$obj1->ShowAllProperty($obj1); //遍历出 1 2 3
echo "<hr/>";
?>
遍历对象
1.仅能遍历属性, 方法不可遍历
2.外部遍历仅能查看公共可见属性
3.如果要查看全部属性, 需要在类中创建外部接口方法来实现
4.最终结果以关联数组格式呈现, 使用foreach()语句进行遍历
<?php
class Demo
{
public $name;
public $age;
public $salary;
private $education = "本科";
public function __construct($name, $age, $salary)
{
$this->name = $name;
$this->age = $age;
$this->salary = $salary;
}
public function listPro()
{
foreach ($this as $key=>$value){
echo '['.$key.'] => '.$value.' ';
}
}
}
//方法一:
//类外只能访问到公共可见属性,不能查看受保护与私有属性
$obj = new Demo('peter', 28, 3800);
foreach ($obj as $key=>$value){
echo $key.'=>'.$value.'<br>';
}
/*
name=>peter
age=>28
salary=>3800
*/
//方法二:
$obj->listPro();
echo "<br>";
/*
* [name] => peter [age] => 28 [salary] => 3800 [education] => 本科
*/
//查询一
print_r($obj);
echo "<br>";
/*
Demo Object ( [name] => peter [age] => 28 [salary] => 3800 [education:Demo:private] => 本科 )
*/
//查询二:
var_export($obj);
/*
Demo::__set_state(array( 'name' => 'peter', 'age' => 28, 'salary' => 3800, 'education' => '本科', ))
*
*/
对象的转换
php的内置标准类stdclass
php中, 有一个类是内置的, 称为内置标准类, 类名是stdclass:
$obj1 = new stdclass();
var_dump($obj1);
结果如下:object(stdClass)#2(0){ }
可见, 该类内部没有任何属性。
将"其他"数据转换为对象
结果就会得到一个标准类(stdclass)的"对象", 除非本身就是对象, 则没有变化。
语法形式:$v2 = (object)$v1; //其中$v1为某个"数据":
对象转换为对象:没有变化;
数组转换为对象:数组的键名当作属性名, 值为对应值。注意: 数字下标无法通过属性语法进行操作, 比如:$obj1->8 = 100;
null转换为对象:空对象;
其他标量数据转换为对象:属性名为固定的"scalar"(访问方式:$v2->scalar), 值为该变量的值
实例:
<?php
$conf = array(
'host'=>'localhost',
'port'=>'3306',
'username'=>'root',
'password'=>'123',
'charset'=>'utf8',
'dbname'=>'php36',
8 => 'abc'
);
$v2 = 2;
$obj1 = (object)$conf;
$obj2 = (object)$v2;
echo "<pre>";
var_dump($obj1);
echo "<br />属性host:" .$obj1->host;
//echo "<br />属性8:" .$obj1->8;//数字下标(属性)出错!
echo "<hr />";
var_dump($obj2);
echo "<hr />";
echo $obj2->scalar; //返回值:2
?>