iLeichun

当前位置: 首页 > 个人日志

Java、PHP、AS中set/get方法的异同

分类:个人日志   来源:原创   时间:2011-05-14 22:29:11
在面向对象编程中,为了更好地实现封装,必须设置类中变量、函数的相关属性。大多数面向对象语言都可以设置四种属性:public、缺省、protected、private。除了private范围的变量、函数不能直接被外部文件访问外其他三种都是可以的,但有时候外部文件必须访问某个文件的private属性时,我们就不得不通过相应的函数提供访问接口,最常用的就是set/get了。本文通过举例说明对Java、PHP、AS中的set/get方法进行分析,以对它们之间的异同进行比较。
代码一(Java):
public class A {
private String name;
public int age;
public A() {
name = "";
age = 0;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
 
public class B {
public static void main(string[] args) {
A a = new A();
//private属性不能直接访问
a.setName("张三");
//public属性可以直接访问
a.age = 20;
System.out.println("姓名:" + a.getName());
System.out.println("年龄:" + a.age);
}
}
 
显示结果:
姓名:张三
年龄:20
 
代码二(PHP):
方法一(类似Java)
<?php
class A {
private $name;
public $age;
function A() {
$name = "";
$age = 0;
}
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $name;
}
}
?>
 
<?php
class B {
function B() {
$a = new A();
//private属性不能直接访问
$a->setName("张三");
//public属性可以直接访问
$a->age = 20;
echo "姓名:" + $a->getName();
echo " ";
echo "年龄:" + $a->age;
}
}
?>
 
<?php
$b = new B();
?>
 
显示结果:
姓名:张三
年龄:20
 
方法二(推荐):
<?php
class A {
private $name;
public $age;
__construct() {
$name = "";
$age = 0;
}
public function __SET($name,$n) {
$this->name = $n;
}
public function __GET($name) {
return $this->name;
}
}
?>
 
<?php
class B {
function B() {
$a = new A();
//private属性不能直接访问,有了name的__SET()方法后,可以通过访问属性的方式访问name,下同
$a->name = "张三";
//public属性可以直接访问
$a->age = 20;
echo "姓名:" + $a->name;
echo " ";
echo "年龄:" + $a->age;
}
}
?>
 
<?php
$b = new B();
?>
 
显示结果:
姓名:张三
年龄:20
 
代码三(AS):
方法一(类似Java)
public class A {
private name:String ;
public age:unint ;
public function A() {
name = "";
age = 0;
}
public function setName(name:String):void {
this.name = name;
}
public function getName():String {
return name;
}
}
 
public class B {
public function B() {
a:A = new A();
//private属性不能直接访问
a.setName("张三");
//public属性可以直接访问
a.age = 20;
trace("姓名:" + a.getName());
trace(" ");
trace("年龄:" + a.age);
}
}
 
b:B = new B();
 
显示结果:
姓名:张三
年龄:20
 
方法二(推荐,类似PHP中“方法二”):
public class A {
private name:String ;
public age:unint ;
public function A() {
name = "";
age = 0;
}
public function set n(name:String):void {
this.name = name;
}
public function get n():String {
return name;
}
}
 
public class B {
public function B() {
a:A = new A();
//private属性不能直接访问
A.n = "张三";
//public属性可以直接访问
a.age = 20;
trace("姓名:" + a.n);
trace(" ");
trace("年龄:" + a.age);
}
}
 
b:B = new B();
 
显示结果:
姓名:张三
年龄:20
 

 

更多