博客列表 >类的声明、对象的实例化、对象的访问_2018年9月3日

类的声明、对象的实例化、对象的访问_2018年9月3日

PHP学习
PHP学习原创
2018年09月11日 21:22:131502浏览

实例

<meta http-equiv="content-type" content="text/html" charset="UTF-8">
<?php
header("content-type=text/html;charset=utf-8");
/**
 * 对象的声明与实例化
 * 类的声明class
 * 对象实例化new
 * 对象的访问->
 */
//创建一个类,利用class来声明一个类
class hello {

}
//使用new来实例化一个类,并将其附给变量$hello
$hello = new hello();
//给对象增加一些属性和方法
$hello->name = '杨过';
$hello->age = 30;
$hello->hello1 = function () {
    return '我是一个方法';
};
//访问对象的属性或方法
echo $hello->name;
echo $hello->age;
echo call_user_func($hello->hello1);//因为hello1是一个函数了,所以要使用回调来处理一下就是call_user_func()来处理

运行实例 »

点击 "运行实例" 按钮查看在线实例


实例

<meta http-equiv="content-type" content="text/html" charset="UTF-8">
<?php
/**
 * 对象的三大特性:封装、继承、多态
 * 封装就是将里面的数据进行私有化或者限制访问
 * 封装用到的三种方法:public公共的共享,private私有的,protected限制访问的
 * 为什么要封装呢?因为将封装起来的对象,使用公共的接口来访问,这样可以提供安全性。进行保护
 * 类中成员,可以直接使用$this来访问成员,可直接访问
 */
//声明一个类
class demo2 {
    //给对象两个公共属性
    public $name = 'php中文网';
    public $email = 'php@php.cn';
    // 再给两个不是公共的属性
    protected $sex = 1;//限制属性,公可以在本类或者子类中访问
    protected $style;//限制的属性,仅可以在本类或者子类中可以访问
    private $age;//私有属性,只可以在本类中访问
    //声明类方法,创建公共接口
    public function abc() {
        return ($this->sex == 0) ? '男性' : '女性';//将受限制属性进行公共接口来访问
    }
    public function cbd() {
        return ($this->sex ==0) ? $this->getsex() : '保密';//判断将私有属性也进行公共接口来访问
    }
}

$demo2 = new demo2();
echo $demo2->name;
echo $demo2->email;
echo $demo2->abc();//因为公共接口是一个函数,所以要不能像前面直接访问属性哪种方法来访问。这个访问的是一个方法,不是一个属性。
echo $demo2->cbd();

运行实例 »

点击 "运行实例" 按钮查看在线实例


实例

<meta http-equiv="content-type" content="text/html" charset="UTF-8">
<?php
/**
 * 类常量、对象初始化、属性的重载
 * 类常量,可以用来创建对象之间的共享数据
 * 对象初始化,用构造方法来实现,让对象在完成一些工作的时候,进行初始化一些值或者属性
 * 例如:对象初始化时,会自动调用对象的一些方法。对象初始化用__construct()
 * 属性的重载:访问限制或者私有的属性或者不存在的属性,会触发这个属性重载
 * 属性的重载有四种方法:__get(),__set(),__isset(),__unset(),这四种方法
 */
class demo3 {
    //类常量,所有对象共享,用类名加范围解析符::来访问,且默认也是公共属性
    //类常量,主要是用来创建类之间的共享数据
    const SIZE_NAME = 'PHP中文网';
    //声明三个私有属性
    private $name;
    private $email;
    private $age;
    //利用构造方法来初始化
    public function __construct($name,$email,$age)
    {
        $this->name = $name;
        $this->email = $email;
        $this->age = $age;
    }
    public function show()
    {
        return '网站名称:'.$this->name.' 公共邮箱是:'.$this->email.' 今年已经:'.$this->age;
    }
    public function __get($name)
    {
        if ($name == 'age') {
            return $name.'不允许查看';
        }
        return $this->$name;
    }
    public function __set($name, $value)
    {
        if ($name == 'email') {
            return $name.'不允许修改';
        }
        $this->$name = $value;
    }
    public function __isset($name)
    {
        if ($name == 'age') {
            return false;//因为是检测,所以这里要设置,true和false
        }
        return isset($this->$name);
    }
    public function __unset($name)
    {
        if ($name == 'name' || $name = 'email') {
            return false;
        }
        unset ($this->$name);
    }
}
//输出类常量利用::来输出
echo demo3::SIZE_NAME;
//输出构造方法
$demo3 = new demo3('php中文网','php@php.cn',30);
echo '<hr>';
//利用__get()来获取值
echo $demo3->age;
echo $demo3->name;
echo $demo3->email;
//echo $demo3->show();
//利用__set()来更新里面的值
 $demo3->name = 'PHP';
 echo $demo3->name;
$demo3->email = 'zl@php.cn';
echo $demo3->email;
//利用__isset()来做属性检测重载
echo isset($demo3->name) ? '末检查到' : '检查到';
echo isset($demo3->age) ? '末检查到' : '检查到';
//利用__unset来销毁一个属性
unset ($demo3->age);
echo $demo3->age;
//因为利用__unset设置了不能销毁,所以这个属性不能销毁,而上面的没有设置销毁,就可以将上面的属性销毁。
unset($demo3->name);
echo $demo3->name;

运行实例 »

点击 "运行实例" 按钮查看在线实例

实例

<meta http-equiv="content-type" content="text/html" charset="UTF-8">
<?php
/**
 * 对象的继承与多态
 * 继承主要是让代码可以重复的使用,这样可以提供效率
 */
class demo4
{
    //父类的属性
    public $name;//声明一个公共的属性
    protected $email;//声明一个受限制的属性
    private $age;//声明一个私有属性
    const ADMIN_NAME = 'PHP中文网';//声明一个类常量

    //父类构造器
    public function __construct($name,$email)
    {
        $this->name = $name;
        $this->email =$email;
    }

    //属性的重载
    public function __get($name)
    {
        if (isset($this->$name)) {
            return $this->$name;
        }
        return '非法属性';
    }
}
//利用extends来继承父类
class demo4_1 extends demo4
{
    private $sex;
    const ADMIN_NAME = '教学管理系统';

    public function __construct($name, $email,$sex = '男')
    {
        $this->name = $name;
        $this->email = $email;
        //引用父类的构造方法,来简写代码
        //利用parent::来引用父类里面的初始化方法
        parent::__construct($name,$email);
        $this->sex = $sex;
    }
    //因为工作中,最终要执行的方法,在子类里面做,所以父类的__get()是可以删除的,也不会影响代码的执行
    //将父类里面的属性重载进行了重写,所以,可以顺利的读取到子类里面的东西
    public function __get($name)
    {
        if (isset($this->$name)) {
            return $this->$name;
        }
        return '非法属性';
    }
}

$demo4_1 = new demo4_1('peter','peter@php.cn');

echo $demo4_1->name;
echo $demo4_1->email;
echo $demo4_1::ADMIN_NAME;//访问父类里面的类常量
echo $demo4_1->sex;//
echo $demo4_1->age;//因为age是私有属性,所以无法访问

运行实例 »

点击 "运行实例" 按钮查看在线实例


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议