php 给对象私有及受保护的成员变量赋值的几种方法
2016-07-10 13:47
1041 查看
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
<?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
相关文章推荐
- PHP之正则函数
- partproble在RHEL 6下无法更新分区信息
- rabbitmq php扩展amqp安装
- php include方法使用的问题
- php crc32,md5,sha1,mhash测试结果
- php 中 0 == 'false',0 == false 会相等,而false != 'false的原因。
- php练习:给指定商品添加特殊效果
- InputStreamReader 和 OutputStreamWriter类用法简介,及演示。
- ContentPrivider内容提供者
- A+B for Input-Output Practice (VIII)
- Mac下php版本切换
- 内核增加支持yaffs2错误问题汇总
- tp 生成缩略图
- php 使用phpqrcode类生成带有logo的二维码 使logo不失真(透明)
- PHP弱类型需要特别注意的问题
- Yii2 RBAC
- PHP之time
- Yii2 如何定义数据库连接
- 我们来判断一个php函数是否被定义
- Yii2实用基础学习笔记(六):Cookie和Session