Blogger Information
Blog 34
fans 0
comment 0
visits 33678
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
php之面向对象初学
Serendipity-Ling
Original
700 people have browsed it
<?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>


Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post