博客列表 >php之面向对象初学

php之面向对象初学

Serendipity-Ling
Serendipity-Ling原创
2018年01月11日 18:24:40708浏览
<?php
/**
 * php之面向对象初体验
 * 对象含有属性和方法,都有静态和非静态区分
 * 访问属性object->property
 * 访问方法object->method()
 * 声明:公共:public;私有:private;受保护:protected
 */
class Test
{
    //关于属性可以在类里实例化,也可以在类外实例化
    //以下的非静态成员必须实例化后才能调用
    public $math = 90,$english = 88;
    public $chinese,$art;
    private $music = 99;
    /*
     * 构造函数(构造器)
     * 构造方法:在创建对象时自动调用,主要用来初始化类的实例对象
     * 构造方法必须用二个下划线开头
     * 它在实例化类的时候自动调用
     * 参数通常是要被初始化的类属性
     */
    public function __construct($math='',$english='')
    {
        $this->math=$math;
        $this->english=$english;
    }
    public function getGrade()
    {
        return '数学成绩为:'.$this->math.' 英语成绩为:'.$this->english;
    }
    //创建公共接口来访问私有属性
    public function getMusic()
    {
        return '音乐成绩是:'.$this->music;
    }
}
$xiaoMing = new Test(80,90);
$xiaoMing->chinese=89;
$xiaoMing->art=67;
echo $xiaoMing->getGrade();
echo '<br>';
echo $xiaoMing->math;
echo '<hr>';
echo '小明的语文成绩是'.$xiaoMing->chinese.' 美术成绩为是'.$xiaoMing->art;

//子类操作
class Exam extends Test
{
    //创建子类自有的属性
     private $firstTime = '0900AM-1130AM'; //对于私有属性,只能在类内部使用,外部要访问,可以创建一个公共方法来提供外部接口
     private $lastTime = '1400PM-1730PM'; //受保护的属性,只能在当前类和子类中访问,外部也不可访问
     protected $level;
    //会自动继承父类的构造函数,如果不需要手动删除
    public function __construct($math = '', $english = '',$level='高中部')
    {
        parent::__construct($math, $english);
        $this->level=$level;
    }
    //创建子类的方法
    public function getTime()
    {
        return $this->level.'数学考试时间:'.$this->firstTime.'<br>英语考试时间:'.$this->lastTime;
    }
    public function loca($loca='教学楼一')
    {
        return $this->level.'的考试地址在'.$loca;
    }
}
echo '<hr>';
echo (new Exam)->getTime(); //通过公共接口来访问私有属性,
echo '<br>';
echo (new Exam)->getMusic(); //通过公共接口访问受保护的属性
$xiaoHong = new Exam(88,99,'初中部');
echo '<br>';
echo $xiaoHong->getTime();
echo '<br>';
echo $xiaoHong->loca('初中部第二大楼');
<?php
/**
 * final关键字的使用
 */
class Demo1
{
    //final声明禁止子类继续调用父类中被final声明的方法
    //final也可以放在class前,表示不允许继承该类
//    final  public function calculate($a=2,$b=3)
    public function calculate($a=2,$b=3)
    {
        $c = $a + $b;
        return '和为:'.$c;
    }
}

class Demo2 extends Demo1
{
    public function calculate($a = 2, $b = 3)
    {
        return parent::calculate($a, $b); // TODO: Change the autogenerated stub
    }
}

$obj1 = new Demo1();
$obj2 = new Demo2();
echo $obj1->calculate();
echo '<br>';
echo $obj2->calculate(4,9);
echo '<br>';
//接下来了解一下判断对象是否是类的实例
echo $obj2 instanceof Demo2;
echo '<br>';
echo $obj2 instanceof Demo1;
<?php
/**
 * 访问类或对象成员
 * 1. 访问对象成员: '->'对象访问符
 * 2. 访问类成员:  '::' 范围解析符
 *
 * $this和self
 * 1. $this:引用当前类的实例(对象)
 * 2. self: 引用当前类
 *
 * 范围解析符使用场景:
 * 1. 类中: 引用本类的静态属性或方法 self::name; self::getName();
 * 2. 类外: 访问类中的静态成员: className::property; className::method();
 */
class Demo3
{
    //私有静态,外部不能访问
     private static $name = 'lzh';
    //类常量必须在声明时就初始化
    const LEVEL = '高中部';
    //受保护静态
    protected static $exam = 'math';
    public function getName()
    {
        return self::$name;
    }
    public static function getInfo()
    {
        return self::$name.'属于'.self::LEVEL.'考试内容:'.self::$exam;
    }
}
class Demo4 extends Demo3
{
    public static function getExam()
    {
        return self::$exam;
    }
}
//不能访问到类中的私有静态
//但是公共静态可以访问
//echo Demo3::$name;
//可以通过对象来访问非静态方法
echo (new Demo3())->getName();
echo'<br>';
echo Demo3::LEVEL;//常量可以访问到
echo'<br>';
//通过类名来访问静态方法
echo Demo3::getInfo();
echo'<br>';
echo Demo4::getExam();
echo'<br>';
//子类的对象能访问父类中的公共方法
echo (new Demo4())->getName();
<?php
/**
 * 静态成员的应用
 */
class Count
{
    public static $count;
    /*
     * 构造方法在创建对象时自动调用,而静态成员不允许使用对象调用,
        所以在构造方法中,不允许使用静态成中
     */
    public static function add($count)
    {
        return self::$count += $count;
    }

}
if (isset($_GET['start']) || isset($_GET['end']))
{
    $start = (int)$_GET['start'];
    $end = (int)$_GET['end'];
    $total = 0;
    for ($i=$start;$i<=$end;$i++)
    {
        $total = Count::add($i);
    }
    echo '总和是:'.$total;
}
?>
<div align="center">
    <form>
        开始<input type="text" name="start">
        <hr/>
        结束<input type="text" name="end">
    </form>
    <button onclick="add();">计算</button>
</div>
<!--接下来写一个提交js脚本-->
<script>
    function add() {
        document.forms[0].submit();
    }
</script>


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