11、PHP面向对象1

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();
?>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值