对付工具的"所有属性", 我们同样可以利用foreach属性来对其进行遍历。
把稳:1 遍历同样须要考虑其属性的可访问性;
2 只能遍历属性, 不能遍历方法。
<?phpclass 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 3echo "<hr/>";?>
遍历工具
1.仅能遍历属性, 方法不可遍历
2.外部遍历仅能查看公共可见属性
3.如果要查看全部属性, 须要在类中创建外部接口方法来实现
4.终极结果以关联数组格式呈现, 利用foreach()语句进行遍历
<?phpclass 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=>peterage=>28salary=>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?>