PHP 面向对象

http://nqdeng.github.io/7-days-nodejs/#1.3.2  node学习地址

http://codeigniter.org.cn/user_guide/toc.html   CI框架学习地址

http://linux.chinaitlab.com/special/linuxcom/Index.html   linux  指令学习地址

http://blog.csdn.net/xiongwjw/article/details/7333112  fiddle 教程

http://www.infoq.com/cn/interviews/qzone-front-end   前端 qq空间博客

一,PHP中的类:

创建一个person类并实例化:

class person{
private $name;

function setName($name){
$this->name = $name;
}
function getName(){
return $this->name;
}
}

var personObj = new person();
personObj->setName('july');

echo personObj->getName();

其中new  是实例化一个类,当实例化一个类时候,当定义对象有构造函数时候会默认调用,其中构造函数式 _construct():

则上面的函数可以改造为:

class person{

private $name;
function _construct($name){
$this->name = $name;
}

function getName(){
return $this->name;
}
}

var personObj = new person('july');

echo personObj->getName();

二,PHP中析构函数:

析构函数和构造函数相反,当一个对象被注销时候调用,php会在请求结束后确保所有资源都被释放,这样析构函数作用显得很微不足道。但在清空一个对象时候记录日志信息十分有用。

class person{
function _destruct()){
echo "清空这个对象时候记录日志信息";

}
}

var personObj = new person();

echo personObj = null;//此时析构函数会默认调用

三,$this解析

在对象方法执行时候 php会自动定义个$this 变量,它表示一个对象本身能够利用它访问到在本对象中定义的变量,如上面的$name变量。

四,public  protect  private 变量

public:权限是最大的,可以内部调用,实例调用等。

protected: 受保护类型,用于本类和继承类调用。

private: 私有类型,只有在本类中使用。

五,静态属性:

不属于类的任何实例,访问方法前面加类名来限制它如下:

<?php
class myClass{
static $mystaticVariable = 0;
}
echo myClass::$mystaticVariable;
?>

六,常量

在类中定义常量是用const进行申明,一般常理是用 大写字母,其中在类中self表示这个类本身

<?php
class myClass{
const COLOR = "red";
function showColor(){
echo self::COLOR;

}
}
echo myClass::COLOR;
var obj = new myClass();
echo obj->showColor;
?>

七,对象克隆:

class myClass{
public $value = 1;

}

$obj1 = new myClass();
$obj2 = $obj1;

$obj2->value = 1;

echo obj1->value;

这个会在php中打印出1 而在php5中打印出2,因为php4中是一个对象拷贝,这样改变$obj2不会影响$obj1,而在php5中 $obj1是一个对象句柄,那么$obj2复制到的也是一个句柄,此时改变$obj2,改变的是喝$obj1指向的同一对象。

八,面向对象中多态,继承使用

<?php
header("Content-type: text/html; charset=utf-8");

class Animal{
function makeSound(){
echo "访问错误,只能通过子类继承访问";

}

};

class dog extends Animal{
function makeSound(){
echo "狗叫";

}
};

class bird extends Animal{
function makeSound(){
echo "鸟叫";

}

};

function echoRightSound($obj){
if($obj instanceof Animal){
$obj->makeSound();
}else{
echo "输入错误的对象";
}

}

echo echoRightSound(new dog);
echo"<br>";
echo echoRightSound(new bird);

?>

如上面所示 ,dog和bird都继承与Animal都实现了父类的Animal的makeSound方法实现了多态。

九,面向对象中抽象类:

//************************面向对象中抽象类****************************//
abstract class sharp{
protected $x,$y;

function setCenter($x,$y){

$this->x = $x;
$this->y = $y;

}

abstract function draw();
}


class drawObj extends sharp
{

function draw(){
echo"<br>实例化一个抽象方法";
}

}

$obj = new drawObj();
$obj->draw();

抽象类中方法一定要在子类中进行重写,不然会报错。

十,接口:

任何一个implements 接口类的对象,将自动获得这个接口定义的常量。接口类的所有方法都是默认 abstract

//*****************定义接口*****************//
interface logable(){
function logString();
}

class Person implements logable{
function logString(){
echo "重写接口中定义的方法";
}
}

接口同时也满足继承  如: interface I1 extends I2 I3 ......{}

final  定义的方法表示继承类不能进行重写,同时也可以用final定义一个类,表示不允许其他类继承此类。

ruby前端观察
原文地址:https://www.cnblogs.com/rubyxie/p/3603701.html