PHP:面向对象

最近学了一点php,被有时候加有时候不加的$搞得有点迷糊。不过终究PHP的语法和C++是比较相类似的,学起来也没有这么困难。现在来总结一下PHP中面向对象这一块,同时与C++的面向对象作一下比较。

类的定义

相同 就是PHP的不用加分号

class Noob
{……};
class Noob
{……}

对象创建

对于c++,有两种创建对象的方法。直接创建和使用指针

Noob a = Noob();
Noob* a = new Noob();

而在PHP中 只允许使用指针。

$a = new Noob();

构造函数/析构函数

PHP 的构造函数和C++就不同了 他有专门的函数构造

void __construct([mixed $args [, $...]]) //构造
void __destruct(void) //析构

相同的是,访问属性必须是public

php

function __construct($var1 , $var2)
{
	$this->url = $var1;
	$this->title = $var2;
}

function __destruct()
{
	echo "对象析构";
}

C++

Noob(string var1 , string var2)
{
	this->url = var1;
	this->title = var2;
}
~Noob()
{
	cout << "对象析构";
}

访问属性

C++是直接用关键字直接声明一个区域,如果没有任何声明默认是private。
php是每个变量/函数之前都要加关键字,如果不加默认public

class Noob
{
	public:
		Noob(int p)
		{
			this->a = p;
		}
		int returnValue()
		{
			return this->a;
		}
	private:
		int a;
};
class Noob
{
	var $a; //可使用var定义变量 属性public
	public $b;
	private $b;
	
	public function __construct()
	{
		....
	}
}

类继承

与C++的不同除了关键字不同 还有的就是php只允许单继承

C++

class Son : public Father
{}
class Son2 : protected Father
{}

php 相当于c++的public继承

class Son extends Father
{}

方法重写

如果从父类继承的方法无法满足子类的要求 我们可以对其进行改写。 这个过程叫做方法的覆盖。

class fin
{
    function myPrint()
    {
        echo "print fa";
    }

}

class fout extends fin
{
    function myPrint()
    {
        echo "print son";
    }
}

$f = new fout;
$f->myPrint();

结果是 print son

接口

php独有的东西
他的作用是 指定某个类必须实现哪些方法 但不需要定义这些方法的具体内容

使用interface 关键字声明一个接口

interface myPrint_interface
{
	public function myPrint1($var1 , $var2);
	public function myPrint2($var1);
}

要实现一个接口 使用implements操作符 类中必须实现接口中定义的方法 ,一个类可以实现多个接口,用逗号分隔开多个接口的名称。

class myPrint implements myPrint_interface
{
	public function myPrint1($var1 , $var2)
	{
		echo "myPrint1";
	}
	public function myPrint2($var1)
	{
		echo "myPrint2";
	}
}

常量

可以把在类中始终不变的值定义为常量
但是我可以把常量随便改 这里先不写了QAQ

静态变量

和c++不同的是 php的静态变量是可以在类内直接赋值的。但是不能通过成员操作符->访问 只能通过类名::访问。

class sb
{
	public static $f = '233';
}

echo sb::$f;

抽象类

和c++类似 只要有一个方法是抽象的 这个类就必须被声明为抽象的。首先这个类不能被实例化,且子类必须重写抽象方法。访问控制必须和父亲一样,或者比父类更宽。

abstract class Father
{
	abstract public function func1();
	public function func2();
}

class Son extends Father
{	
	public function func1()
	{
		echo "chong xie";
	}
}

final 关键字

php 独有 如果父类中的方法被声明为final 则子类无法重写该方法,如果一个类被声明为final 则该类无法被继承

调用父类的构造方法

子类中写parent::__construct(参数) 即可。
c++中

class Father
{
	public:
	Father(int f)
	{
		cout << f << endl;
	}
};

class Son : public Father
{
	public:
	Son(int x) : Father(x + 1)
	{
		cout << x << endl;
	}
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值