美文网首页
对象类型

对象类型

作者: Yang_Xiao | 来源:发表于2018-12-25 17:17 被阅读0次

    如果将一个对象转换成对象,它将不会有任何变化。如果其它任何类型的值被转换成对象,将会创建一个内置类 stdClass 的实例。如果该值为 NULL ,则新的实例为空。数组转换成对象将使键名成为属性名并具有相对应的值。对于任何其它的值,名为 scalar 的成员变量将包含该值。

    $obj  = (object)  'ciao' ;

    echo   $obj -> scalar ;   // ciao     其他值

      $object = (object) ['propertyOne' => 'foo','propertyTwo' => 42,];  

    echo $object->propertyOne    //foo   数组

    //我不懂的例子

    class stdObject {

        public function __construct(array $arguments = array()) {

            if (!empty($arguments)) {

                foreach ($arguments as $property => $argument) {

                    $this->{$property} = $argument;

                }

    }

    }

        public function __call($method, $arguments) {

            $arguments = array_merge(array("stdObject" => $this), $arguments); // Note: method argument 0 will always referred to the main class ($this).

            if (isset($this->{$method}) && is_callable($this->{$method})) {

                return call_user_func_array($this->{$method}, $arguments);

            } else {

                throw new Exception("Fatal error: Call to undefined method stdObject::{$method}()");

            }

    }

    }

    // Usage.

    $obj = new stdObject();

    $obj->name = "Nick";

    $obj->surname = "Doe";

    $obj->age = 20;

    $obj->adresse = null;

    $obj->getInfo = function($stdObject) { // $stdObject referred to this object (stdObject).

        echo $stdObject->name . " " . $stdObject->surname . " have " . $stdObject->age . " yrs old. And live in " . $stdObject->adresse;

    };

    $func = "setAge";

    $obj->{$func} = function($stdObject, $age) { // $age is the first parameter passed when calling this method.

        $stdObject->age = $age;

    };

    $obj->setAge(24); // Parameter value 24 is passing to the $age argument in method 'setAge()'.

    // Create dynamic method. Here i'm generating getter and setter dynimically

    // Beware: Method name are case sensitive.

    foreach ($obj as $func_name => $value) {

        if (!$value instanceOf Closure) {

            $obj->{"set" . ucfirst($func_name)} = function($stdObject, $value) use ($func_name) {  // Note: you can also use keyword 'use' to bind parent variables.

                $stdObject->{$func_name} = $value;

            };

            $obj->{"get" . ucfirst($func_name)} = function($stdObject) use ($func_name) {  // Note: you can also use keyword 'use' to bind parent variables.

                return $stdObject->{$func_name};

            };

        }

    }

    $obj->setName("John");

    $obj->setAdresse("Boston");

    $obj->getInfo();

    相关文章

      网友评论

          本文标题:对象类型

          本文链接:https://www.haomeiwen.com/subject/pgoflqtx.html