php对象的传参,赋值,函数返回,均为引用
age = $age; } public function getAge() { return $this->age; } public function setAge($age) { $this->age = $age; } public function __toString() { return "i am ".$this->age . " years old".""; }}function change_age(student $student){ $student->age=180; return $student;}$student1 = new Student(10);$student2 = $student1;$student2->age = 30;$student3 = change_age($student1);echo $student1;echo $student2;echo $student3;$student3->age=10;echo $student1;echo $student2;echo $student3;$methods = get_class_methods($student1);var_dump($methods);$classname = get_class($student1);echo $classname;$class_vars = get_class_vars('Student');var_dump($class_vars);$object_vars = get_object_vars($student1);var_dump($object_vars);
运行结果为
i am 180 years old
i am 180 years old i am 180 years old i am 10 years old i am 10 years old i am 10 years oldarray (size=4) 0 => string '__construct' (length=11) 1 => string 'getAge' (length=6) 2 => string 'setAge' (length=6) 3 => string '__toString' (length=10)
student
array (size=1) 'age' => null
array (size=1) 'age' => int 10
类的一些方法
•__autoload — 尝试加载未定义的类
•call_user_method_array — 调用一个用户方法,同时传递参数数组(已废弃) •call_user_method — 对特定对象调用用户方法(已废弃) •class_alias — 为一个类创建别名 •class_exists — 检查类是否已定义 •get_called_class — 后期静态绑定("Late Static Binding")类的名称 •get_class_methods — 返回由类的方法名组成的数组 •get_class_vars — 返回由类的默认属性组成的数组 •get_class — 返回对象的类名 •get_declared_classes — 返回由已定义类的名字所组成的数组 •get_declared_interfaces — 返回一个数组包含所有已声明的接口 •get_declared_traits — 返回所有已定义的 traits 的数组 •get_object_vars — 返回由对象属性组成的关联数组 •get_parent_class — 返回对象或类的父类名 •interface_exists — 检查接口是否已被定义 •is_a — 如果对象属于该类或该类是此对象的父类则返回 TRUE •is_subclass_of — 如果此对象是该类的子类,则返回 TRUE •method_exists — 检查类的方法是否存在 •property_exists — 检查对象或类是否具有该属性 •trait_exists — 检查指定的 trait 是否存在类的魔术方法
__construct()
__destruct()
__call()在对象中调用一个不可访问方法时,__call() 会被调用
__callStatic()在对象中调用一个不可访问静态方法时,__call() 会被调用
__get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo()等方法在 PHP 中被称为"魔术方法"(Magic methods)。
data[$name] = $value; } public function __get($name) { echo "Getting '$name'\n"; if (array_key_exists($name, $this->data)) { return $this->data[$name]; } $trace = debug_backtrace(); trigger_error( 'Undefined property via __get(): ' . $name . ' in ' . $trace[0]['file'] . ' on line ' . $trace[0]['line'], E_USER_NOTICE); return null; } /** PHP 5.1.0之后版本 */ public function __isset($name) { echo "Is '$name' set?\n"; return isset($this->data[$name]); } /** PHP 5.1.0之后版本 */ public function __unset($name) { echo "Unsetting '$name'\n"; unset($this->data[$name]); } /** 非魔术方法 */ public function getHidden() { return $this->hidden; }}