美文网首页
对象类型

对象类型

作者: 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();

相关文章

  • flow中文文档(四)

    对象类型语法 可选对象类型属性 密封对象 未密封对象 精确对象类型 ObjectsAsMaps 在JavaScri...

  • 对象

    1.对象分为值类型和引用类型 值类型(不是对象) 引用类型(都是对象) 类型的判断值类型判断用typeof引用类型...

  • 动态绑定

    动态绑定 对象的静态类型:对象在声明时采用的类型,在编译期确定,静态类型无法更改 对象的动态类型:所指对象的类型,...

  • 对象类型

    对象是JavaScript中的一组属性和方法的无序集合。对象一般是针对一个功能的描述。比如:狗对象/猫对象:常见拥...

  • 对象类型

    《...我们是谁?...》——保罗·高更1897 程序设计的实践,不是一个精确定义的领域,我们谈的概念里,有些是约...

  • 对象类型

    import java.util.*; public class Main {//先定义一个类 String na...

  • 对象类型

    如果将一个对象转换成对象,它将不会有任何变化。如果其它任何类型的值被转换成对象,将会创建一个内置类stdClass...

  • Flow对象类型(Object Types)

    对象类型(Object Types) 对象类型语法 对象类型尝试尽可能多地匹配JavaScript中的对象的语法。...

  • swift3.0 类型转换

    任意对象 anyObject转换为json对象 任意对象转换为String类型 String类型转Int类型

  • 4-基本包装类型 Object.ptototype详解 静态成员

    基本包装类型 类型: String字符串对象 | Number数值对象 | Boolean布尔类型对象(区别于简单...

网友评论

      本文标题:对象类型

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