四时宝库

程序员的知识宝库

PHP 对象遍历和转换(php 对象遍历和转换的区别)

对象的遍历

对于对象的"所有属性", 我们同样可以使用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
?>

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接