php 给对象私有及受保护的成员变量赋值的几种方法

1.构造方法赋值

<?php
class City{
	private $_cityName;
	private $_population;
	
	//function city($_cityName,$_population){}  php5.3.3起在有命名空间的类中,类同名方法不再视为构造方法而是常规方法,无命名空间类中不影响
	public function __construct($_cityName,$_population){
		$this->_cityName = $_cityName;
		$this->_population = $_population;
	}
	
	public function getCityName(){
		return $this->_cityName;
	}
	
	public function getPopulation(){
		return $this->_population;
	}
}

$nanjing = new City('南京',10000000);
echo '城市:'.$nanjing->getCityName(),'<br/>';		//城市:南京
echo '人口:'.$nanjing->getPopulation(),'<br/>';	//人口:10000000


2.魔术方式赋值和调用:__set()、__get()

<?php
class City{
	private $_cityName;
	private $_population;
	
	//magic method: __set()  
	/**
	当给一个无访问权限或不存在的属性赋值时,__set()魔术方法会自动调用,并传入两个参数:属性和属性值
	$suzhou->_cityName='苏州' ---无权访问权限--> __set('_cityName','苏州');
	**/
	public function __set($property_name,$property_value){
		$this->$property_name = $property_value;
	}
	
	//magic method: __get()
	/**
	当我们调用一个权限上不允许访问的属性或者是不存在的属性时,__get()魔术方法会自动调用,并且自动传参,参数名是属性名
	$suzhou->_cityName ---无访问权限--> __get(_cityName);
	**/
	public function __get($property_name){
		if(isset($this->$property_name)){
			return $this->$property_name;	
		}else{
			return null;
		}
		
	}
}


//设置__set()和__get()方法,可以在类外部像给public修饰的成员变量一样赋值和调用
$suzhou = new City();
$suzhou->_cityName = '苏州';  
$suzhou->_population = 7000000;
echo '城市:'.$suzhou->_cityName,'<br/>';	//城市:苏州
echo '人口:'.$suzhou->_population,'<br/>';	//人口:7000000


3.调用类常规方法传参赋值

<?php
class City{
	private $_cityName;
	private $_population;

	private $_factory;
	
	function setCityName($_cityName){
		$this->_cityName = $_cityName; 
	}
	
	function setPopulation($_population){
		$this->_population = $_population;
	}
	
	function getCityName(){
		return $this->_cityName;
	}
	
	function getPopulation(){
		return $this->_population;
	}

	
	//
	function set($name,$value){
		$this->_factory[$name] = $value;//以数组的形式存储变量赋值
	}
	
	function get($name){
		return $this->_factory[$name];
	}
}


$shanghai = new City();
//通过函数传参的形式给对象指定私有变量赋值,通过指定函数获取指定私有变量值
$shanghai->setCityName('上海'); 
$shanghai->setPopulation(30000000);
echo '城市:'.$shanghai->getCityName(),'<br/>';  	//城市:上海
echo '人口:'.$shanghai->getPopulation(),'<br/>';	//人口:30000000

$shanghai->set('totalArea','6340平方公里');
$shanghai->set('areaCode','017');
$shanghai->set('zipCode',200000);
echo '面积:'.$shanghai->get('totalArea'),'<br/>';	//面积:6340平方公里
echo '区号:'.$shanghai->get('areaCode'),'<br/>';	//区号:017
echo '邮编:'.$shanghai->get('zipCode'),'<br/>';	//邮编:200000


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值