博客列表 >__construct()构造函数__get()和__set()魔术方法-----2018年05月02日

__construct()构造函数__get()和__set()魔术方法-----2018年05月02日

失去过去的博客
失去过去的博客原创
2018年05月03日 10:15:421001浏览

1、类文件

<?php
class Phone
{
	//创建私有属性 private public 公共的 protected 受保护的 var不推荐使用了已经淘汰
	private $name='';
	private $price=0;
	private $model='';
	private $data=[];
	//魔术方法__construct()该方法是构造方法就是能在对象实例化的时候直接自动调用
	//并且一个标准的类中只能有一个构造方法
	//一个方法中只能用一个return 否则会警告return 过多
	public function __construct($name,$price,$model){
//		初始化构造方法的成员属性
		$this->name = $name;
		$this ->price = $price;
		$this->model = $model;

	}
	public function sale(){
		
		$msg =  '手机名称:'.$this->name.'<br>型号是:'.$this->model.'<br>价格是:'.$this->price;
	
		return $msg;
	}
	//__get()魔术方法 该方法是获取当前属性是私有属性当值 该方法在同一个类中不能重复只能设置一个
	public function __get($name){
	$msg = '非法操作';
	switch ($name) {
		case 'name':
			$msg = $this->name;
			break;
		case 'price':
			$msg = $this->price;
			break;
		case 'model':
			$msg = $this->model;
			break;	
		case 'data':
			$msg = $this->data;
			break;
		default:
			$msg='属性不存在';
			break;	
	}
	return $msg;
	}
//魔术方法__set() 该方法是用于设置属性值的魔术方法 类外部创建对象赋值的时候对私有属性的赋值
//该方法有两个参数 参数1是属性名称,参数2是属性值
public function __set($name,$value){
	//直接设置属性
//$this->$name=$value;
//判断是否存在该属性如果不存在则保存到数组中
if (isset($this->$name)) {
 $this->$name=$value;
	
} else {
	//不存在则存放在这个数组中
	$this->data[$name]=$value;
}



}
	
	
}




?>

运行实例 »

点击 "运行实例" 按钮查看在线实例

实例化demo.php

<?php
//加载文件
require 'Phone.php';
//创建一个对象 当对象创建成功后就会自动执行后构造方法 该方法不能手动调用
 $phone = new Phone('三星',4320,'i900');
   echo $phone->sale();
 echo '<hr>';
 //魔术方法__get()测试
   echo $phone->name;
 echo '<hr>';
 
   echo $phone->price;
  echo '<hr>';
   
   echo $phone->model;
 //魔术方法__set()
echo $phone->name='奶茶妹妹';
echo $phone->model='y2638';
echo $phone->price=3222;
 $phone->luo='ding';
 $phone->apple=true;
 $phone->orange=123;
 $phone->mac='231';
 var_dump($phone->data);

?>

运行实例 »

点击 "运行实例" 按钮查看在线实例

QQ20180503-101456.png

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议