属性权限public private protected
public: 可以自由在类内及类外部修改
private: 只允许在类内部读取和修改
protected: 可以这个类及其子类中读取和修改
----------------------------------------------------------------
属性的初始值:
object对象类型 与resource资源类型不允许成为属性初始值
也不允许使用先前定义的属性为其他属性赋值
----------------------------------------------------
<?php /** * @ 变量之间的传值方式默认按值传递(指两个变量不共享内存分别有自己的存储空间) * */ echo "<b>变量之间的传值方式默认按值传递</b><br />"; $myFriends = array('张三', '李四', '王五'); $yourFriends = $myFriends; //修改$myFriends
$myFriends[] = "其他"; echo "<pre>"; echo "<b>我的朋友--------<br /></b>"; print_r($myFriends); echo "<b>你的朋友--------<br /></b>"; print_r($yourFriends); echo "</pre>"; //若想让其按引用方式传弟只需在第三行$myFriends前加“&”
//这样修改引用的变量,被引用的变量值也随之改变
echo "----------------------------------<br>"; echo '<b>对象变量之间的传值方式默认按引用传递(共享同一块内存地址)</b><br />'; class MyFriend { public $myfriend = array('张三', '李四', '王五'); public function getFriendNames() { foreach( $this->myfriend as $name) { echo '姓名:'.$name."<br />"; } } } $myFriends = new MyFriend(); //此处按引用传递,修改$youFriends同时$myFriends也会受影响
$youFriends = $myFriends; //为$youFriends增加一个朋友名子
$youFriends->myfriend[] = '其他'; //显示$myFriends的朋友发现同时被改变
$myFriends->getFriendNames(); ?>
|
在类中使用$this->调用一个不存在的属性时PHP5为其自动创建一个默认权限为PUBLIC
的方量
<?php class Test { public $name="a"; public function __construct() { $this->age = 10; } } $test = new Test(); echo $test->age; ?>
|
可以向一个方法内部传递另外一个对象的引用变量
<?php class Test { public $user = '张三'; } class Test2 { private $a; public function setA($a) { $this->a = $a; } public function getA() { return $this->a; } } $Test = new Test(); $Test2 = new Test2(); $Test2->setA($Test); echo $Test2->getA()->user; //可将另外一个数据库类直接引用到当前类中
?>
|
<?php //对象的比较
//当使用比较操作符"==":如果两个对象拥有相同的属性,属于同一个类
//且被定义在相同的命令空间中,则相等
class Hello { public $a; public $b; public function Hello() { } } $a = new Hello(); $b = new Hello(); if($a == $b) echo "相等"; else echo "不等"; ?> <?php
//当使用 "==="时,仅当两个对象指向相同类(在某一特定命令空间中)才相等 echo "<br>"; class Hello2 { public $hello; } $hi = new Hello2(); $other = $hi; if($other === $hi) echo "相等"; else echo "不等"; ?>
|
PHP5构造方法
<?php class Person { private $name; public function __construct($name) { $this->name = $name; echo '<br>构造方法运行了...<br>'; echo "/$name is <b>" . $this->name . "</b>"; } } $per = new Person('张三'); $per2 = new Person('李四') ?>
|
<?php //析构函数
class Person { public function __destruct() { echo "当对象没有指向时析构函数运行销毁对象节省内存"; echo "做关闭数据库,文件等收尾工作"; } } $garbage = new Person(); ?>
|
<?php //PHP5构造方法也可以被继承
class Animal { public $color; public $weight; //如果没有默认值,则在子类中会提示构造方法缺少参数 public function __construct($color='red', $weight='150') { $this->color = $color; $this->weight = $weight; echo "Animal 构造方法执行了"; } } class Dog extends Animal { } $dog = new Dog(); ?>
|
数据封装的好例子
<?php class MyMoney { private $myMoney = 1000; public function loan($money) { if($this->myMoney >= $money) { $this->myMoney = $this->myMoney - $money; echo "借你了!兄弟我也快干了啊<br>"; } else { echo "兄弟我无法借给你" . $money . " 我破产了<br>"; } } } $my = new MyMoney(); $my->loan(500); $my->loan(500); $my->loan(500); $my->loan(500); ?>
|
重写
如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖.也称
方法的重写,当对父类的方法进行重写时,子类中的文法必须和父类的中对应的方法名相同并
且子类中的覆盖方法不能使用比父类中被覆盖的方法更严格的访问权限
<?php //通过parent::调用父类的方法
class emplayee { protected $sal= 3000; public function getSal() { $this->sal = $this->sal + 1200; return $this->sal; } } class Managre extends emplayee { public function getSal() { parent::getSal(); $this->sal = $this->sal + 1500; return $this->sal; } } $emp = new emplayee(); echo "普通员工工资为" . $emp->getSal(); $man = new Managre(); echo "管理人员工资为" . $man->getSal(); ?>
|