1、PHP的面向对象与其他语言类似,但也有不同。
- PHP访问成员变量时,需要用“->”,而不能用“.”,访问成员函数时,需要用“->”,而不能用“.”。操作符“::”可以在没有任何声明实例的情况下访问类中的静态成员,必须用static定义。
- PHP用new实例化对象时,类名后面的括号可以省略。new className();new className都是可以的,当然构造函数是需要没有参数的。
2、在类中,用var定义成员变量,var定义的成员变量都是公开的。
3、创建子类时用extends继承父类。
一个类的例子如下:
<?php
class Site{
//成员变量
var $url;//用var定义成员变量,为公有变量
var $title;
//成员函数
function setUrl($par){
$this->url=$par;
}
function getUrl(){
echo $this->url.PHP_EOL;
}
function setTitle($par){
$this->title=$par;
}
function getTitle(){
echo $this->title.PHP_EOL;
}
}
class subSite extends Site{
var $category;
function setCat($par){
$this->category=$par;
}
function getCat(){
echo $this->category.PHP_EOL;
}
function getUrl(){//方法重载
echo $this->url.PHP_EOL;
return $this->url;
}
function getTitle(){
echo $this->title.PHP_EOL;
return $this->title;
}
}
$taobao=new Site;//用默认的构造函数,可以不加括号
$google=new Site();
$taobao->setTitle("淘宝");//只能用箭头访问成员函数
$google->setTitle("谷歌搜索");
$taobao->setUrl("taobao.com");
$google->setUrl("google.com");
$taobao->getTitle();
$google->getTitle();
$taobao->getUrl();
$google->getUrl();
?>
输出如下:
4、 PHP自己实现构造函数时,用__construct。注意:前缀时两根下划线。
<?php
class myClass{
function __construct(){//两根下划线
print "构造函数\n";
$this->name="myClass";
}
function __destruct(){
print "销毁".$this->name."\n";
}
}
echo "start".PHP_EOL;
$obj=new myClass();
echo "end".PHP_EOL;
?>
输出结果:构造函数在实例化对象时调用,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。
5、类中的方法可以被定义为公有,私有或受保护。如果没有设置这些关键字,则该方法默认为公有。
6、使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。
接口中定义的所有方法都必须是公有,这是接口的特性。
类中必须实现接口中定义的所有方法。
类可以实现多个接口,用逗号来分隔多个接口的名称。
<?php
interface iTemplate{
public function setVariable($name,$var);
public function getHtml($template);
}
class Template implements iTemplate{
public static $var1=1;//静态属性
public $var2=3;
public $vars=array();
public function setVariable($name,$var){
$this->vars[$name]=$var;
}
public function getHtml($template){
foreach ($this-vars as $name => $value) {
$template=str_replace("{'.$name.'}",$value,$template);
}
return $template;
}
}
$iT=new Template;
$iT->setVariable("golden states","curry");
echo $iT::$var1.PHP_EOL;//静态属性用实例访问,有$符号
echo Template::$var1.PHP_EOL;//静态属性用类名访问$符号
echo $iT->var2;//箭头后面没$。
print_r($iT->vars);//访问数组
var_dump($iT->vars);
?>
7、PHP 对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。
- public(公有):公有的类成员可以在任何地方被访问。
- protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。
- private(私有):私有的类成员则只能被其定义所在的类访问。
<?php
class myClass{
public $public ='public';
protected $protected='protected';
private $private='private';
function printHello(){
echo $this->public.PHP_EOL;
echo $this->protected.PHP_EOL;
echo $this->private.PHP_EOL;
}
}
$o=new myClass;
echo $o->public;
//echo $o->protected;
//echo $o->private;
$o->printHello();
class subClass extends myClass{
protected $protected="sub protected";
function printHello(){
echo $this->public.PHP_EOL;
echo $this->protected.PHP_EOL;//输出子类的protected
echo $this->private.PHP_EOL;
}
}
$o2=new subClass();
echo $o2->public;
//echo $o2->private;
//echo $o2->protected;
$o2->printHello();
?>