php对象的传参,赋值,函数返回,均为引用
<?php
/**
* Created by PhpStorm.
* User: wangweiwei11
* Date: 2016/10/23
* Time: 11:35
*/
class student{
public $age;
public function __construct($age = 0)
{
$this->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"."<br/>";
}
}
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 old
array (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)。
<?php
class PropertyTest {
/** 被重载的数据保存在此 */
private $data = array();
/** 重载不能被用在已经定义的属性 */
public $declared = 1;
/** 只有从类外部访问这个属性时,重载才会发生 */
private $hidden = 2;
public function __set($name, $value)
{
echo "Setting '$name' to '$value'\n";
$this->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;
}
}