php面向对象(一)
2015-11-01 20:06
661 查看
php面向对象(一)
phpzp2015-10-31
14:52-23
php的面向对象很规矩啊,与js不同,js中没有类,没有接口,处处为对象;php有类,有接口,有很规矩的对象。
php的对象就是类的实例化:
class Dog implements IAnimal{
public function Eat() {
echo "dog can eat...";
}
}
$dog = new Dog();
$dog->Eat();
[/code]
$dog是类
Dog的实例化对象,拥有
Eat方法,我们可以看,这个方法是
public得,
public是php得一个关键字,下面我们就来看一下php的关键字。
public:
在本类,子类或其他类中都可以访问到;
private:
只有在本类中可以访问到;
protected:
在本类,子类中可以访问到,其他类中不可以访问到;
static:
对象被销毁后,仍然会保留
static类型的成员变量和方法,(静态方法中只能调用静态变量,但是普通方法中都可以调用)静态类型在类第一次被加载时就已经被分配了内存空间。个人感觉着有点像js中的全局变量啊。
final:表示不可以继承,假如是类,则不可以有子类,如果是类中的方法,则该方法不可以重写和覆盖。
final class Dog{
public function eat() {
echo "dog can eat...";
}
}
class Spot extends Dog {};
// 报错,Dog类是final类型,不可以有子类
[/code]
class Dog {
final function eat() {
echo "dog can eat...";
}
}
class Spot extends Dog{
function eat() {
echo "sopt can eat...";
}
};
// 报错,方法类型为final,不能被覆盖
[/code]
类常量
const PI = 3.1415926;
class Dog {
const PI = 3.14;
}
echo Dog::PI; // Dog为作用域符号,指的是调用Dog类下的常量PI,Dog类并不用实例化就可以访问到
$dogA = new Dog();
echo $dogA->PI; // 报错,类常量不可以这么访问
[/code]
构造方法和析构函数
构造函数(
__construct)对类的一些成员变量进行初始化;
析构函数(
__destruct)与构造函数相反,对象被销毁时调用,来释放内存,但是使用根本不多,因为php不像C++那样,php有垃圾回收机制,所以析构函数不怎么用写就可以。
class Dog {
public $name;
public $age;
private $job; // 本类以外不能调用
function __construct($name,$age,$job) {
$this->name = $name;
$this->age = $age;
$this->job = $job;
echo "实例化对象时来调用初始化变量";
}
// 我们复写一下这个析构函数,来看其何时调用
function __destruct() {
echo "实例化对象内存被销毁";
}
}
$dog = new Dog("zp",19,"student"); // 实例化对象时来调用初始化变量
echo $dog->name;
// echo $dog->job; // 报错啊,job是私有变量啊
unset($dog); // 实例化对象内存被销毁
[/code]
继承
在继承时,php子类的构造函数,会优先调用子类的构造函数
class Animal{
function __construct() {
echo '我是父类构造函数';
}
}
class Dog extends Animal{
function __construct() {
echo '我是子类构造函数';
}
}
$dog = new Dog();// 我是子类的构造函数
[/code]
抽象类和接口,抽象类->抽象类中至少要包含一个抽象方法,抽象方法并没有方法体,方法体必须在子类中去实现,并且抽象类不可以被实例化。
abstract class Animal{
abstract function eat();
}
class Dog extends Animal{
function eat () {
echo "dog can eat...";
}
}
$dog = new Dog();
$dog = new Animal(); // 报错
$dog->eat();
[/code]
接口,用关键字
interface来定义接口,接口中不会写任何的方法体,全部依靠类来实现,类实现接口用关键字
implements
interface IAnimal{
function Eat();
}
class Dog implements IAnimal{
public function Eat() {
echo "dog can eat...";
}
}
$dog = new Dog();
$dog->Eat();
[/code]
php只支持单继承,但是我们可以用接口来实现多继承:
interface IAnimal{
function Eat();
}
interface IDog{
function Sleep();
}
class Dog implements IAnimal,IDog{
public function Eat() {
echo "dog can eat...";
}
public function Sleep() {
echo "dog can sleep...";
}
}
$dog = new Dog();
$dog->Eat();
$dog->Sleep();
[/code]
相关文章推荐
- PHP实现QQ快速登录
- laravel中ubuntu下执行php artisan migrate总是报错
- php实战之使用递归读取商品无限分类
- vsftpd说明,有用,转了
- PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
- 重读php文档
- ThinkPHP学习实践(二)单字母函数用法
- DATASNAP中间件调用带OUTPUT参数的存储过程
- 关于php的register_globals和magic_quotes_gpc参数配置
- OS X 10.11下PHPstorm php-cgi not found 并且访问项目目录502
- phpstrom+xdebug 配置
- 关于php-echo原理
- sae中配置weiphp,修复图片上传问题
- PHP命名空间解析规则
- 对于zendframework2的路由配置的说明
- API 参考 (SQL Server Driver for PHP)
- php输出查询数据转换成json
- 如何修改WAMP中mysql默认空密码&重新登录phpmyadmin
- PHP+Mysql+AJAX登录验证
- PHP+Mysql+AJAX无跳转刷新例子