05-PHP类与对象基础

1、PHP与html环境

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 退出html,进入php环境 -->
    <?php
    //php代码,在服务器上执行
    ?>
    <!-- 退出php环境,进入html -->

    <!-- 如果被包含的是php代码 -->
    <?php
    
    ?>

    <!-- 如果被包含的是html -->
    <!-- 直接写 -->

    <!-- 我们的包含文件有两种 -->
    <!-- 一种是纯的php代码 -->
    <!-- 另一种是html代码 -->
    <!-- 如果被包含的是php代码,我们不需要写结束标记 -->
    <!-- 因为我们把当前的php代码嵌入到另一个文件中时,该文件也要执行php代码才能加载被引入的外部文件 -->
    <!-- 然后通过数组的脚本来退出 -->
</body>
</html>

2、文件包含

<?php
namespace _0812;

use DirectoryIterator;

//文件包含

//本质,将外部文件的内容,插入到当前的位置

//include

//使用相对路径
include 'inc/f1.php';

//推荐使用绝对路径,可以忽略配置文件的设置,加载起来更快
//包含的文件与当前的脚本公用一个作用域
echo $username . '<hr>';

//__DIR__可以返回当前脚本在服务器上所在的路径
echo __DIR__ . '/inc/f1.php' .'<hr>';

//使用DIRECTORY_SEPARATOR常量,规范路径书写
echo __DIR__ .DIRECTORY_SEPARATOR. 'inc'.DIRECTORY_SEPARATOR.'f1.php'.'<hr>';
$user = include 'inc/f1.php';

list('username' => $name, 'email' => $email) = $user;

echo $username . ',' . $email . '<hr>';

echo join(',',$user) . '<hr>';

vprintf('%s,%s',$user);
echo '<hr>';
//require

$fileName =  __DIR__ . '/inc/f12.php';
if(file_exists($fileName)){
    require $fileName;
}else{
    echo '文件不存在';
}
// die('程序中断');后面的就不执行了
//exit('代码中断');后面的就不执行了,与die类似
echo $username1;

//include,require,功能一样,区别在于出错的处理上
//include:忽略错误,继续执行后面的代码,require,直接退出

上述运行结果:

 3、类的声明与实例化

<?php
namespace _0812;

//对象是一个容器,是全局成员的一个前缀

//以人为例,类是筛选标准,小明符合标准,小明就是这个类的实例化

//类:全局成员,声明:class,大驼峰命名,如UserName(帕斯卡命名)

//1.类的声明
class Goods
{
    //...
}
//2.类的实例化
$goods = new Goods();

//实例总是与一个类绑定,是某个类的实例
//对象更通用一些,在不引起歧义的情况下,实例其实就是对象
//如果实在要区分,那么实例化是一个过程,但是没有对象化一说

//3.类的判断
var_dump($goods instanceof Goods);
echo '<hr>';

echo get_class($goods) . '<hr>';

//动态类
//控制器就是一个动态类,控制器名称出现url
$controller = ucfirst('goods');
//UserController.php
// $controller = ucfirst('goods') . 'Controller';
$obj = new $controller();
var_dump($obj);

上述运行结果:

4、类成员

<?php
namespace _0812;

/**
 * 类成员
 * 1.实例成员
 * 2.静态成员
 */

class User1
{
    //1.实例成员
    //(一)属性,变量的语法
    //public:默认
    public $username = '张老师';
    //私有只能在当前的类中使用
    private $salary = 24567;

    public $role = '太太';

    private $age = 18;

    //(二)方法:函数的语法
    public function getSalary()
    {        
        //$user = new User1;
        //$this:和当前类实例绑定
        //只要前面写$符,后面的属性就可以不用写了
        return $this->salary;
    }

    public function getAge()
    {
        //类的内部:用$this
        return $this->age;
    }

    //获取器 __get(要获取的属性名) :魔术方法,双下划线开始的系统方法
    //$name:要获取的属性名
    public function __get($name){
        
        //通过请求拦截可以设置一些过滤规则
        if($name === 'salary')
        {
            if($this->role === '太太')
            {
                return $this->$name;
            }
            return $this->$name -1000;
        }

        return $this->$name;
    }

    //修改器/设置器 __set(属性,值) :魔术方法,双下划线开始的系统方法
    public function __set($name,$value)
    {
        
        if($name==='age')
        {
            if($value >= 18 && $value <= 50)
            {
                $this->$name = $value;
            }else{
                echo '年龄越界';
            }
        }
    }

    //__get  __set,成员访问拦截器,拦截非法访问
}

//实例化
//在类的外部,用对象访问成员
$user1 = new User1();
echo $user1->username . '<hr>';
// echo $user1->salary . '<hr>';
echo $user1->getSalary() . '<hr>';
echo $user1->getAge() . '<hr>';

echo $user1->salary . '<hr>';
echo $user1->age . '<hr>';

$user1->age = 58;
echo $user1->age . '<hr>';

上述运行结果:

 5、成员访问

<?php
namespace _0812;

/**
 * 类成员
 * 1.实例成员:用对象访问,$this->对象引用
 * 2.静态成员 static:用类访问,self::->类引用
 */

class User2
{
    public $username = '张老师';
    private $salary = 3000;
    private $age = 28;

    //当前类实例的状态(属性值)应该由用户来决定,而不是由类来写死

    //构造方法:魔术方法,不用用户主动调用,由某个事件或动作来触发
    //__get,__set
    //构造方法,实例化该类时,会自动触发
    public function __construct($username,$salary,$age,$nation='China')
    {
        $this->username = $username;
        $this->salary = $salary;
        $this->age = $age;

        //静态成员可以用构造函数进行实例化
        //初始化静态属性
        self::$nation = $nation;
    }
    //静态成员 static
    //静态属性
    public static $nation = '中国';

    //静态方法
    public static function hello()
    {
        //类的内部可以不用类名,用::self来引用当前类或者用::static
        // return 'Hello,' . User2::$nation;
        return 'Hello,' . self::$nation;
    }
}

$user2 = new User2('李老师',2800,30);

echo $user2->username . '<br>';

$user3 = new User2('朱老师',3200,32);

echo $user3->username . '<br>';

// echo $user3->$nation . '<hr>';访问不到
echo User2::$nation . '<hr>';

echo User2::hello() . '<hr>';

$user4 = new User2('刘老师',3500,35);
echo User2::$nation;

$user4 = new User2('刘老师',3500,35,'中国');
echo User2::$nation;

上述运行结果:
​​​​​​​

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七色的天空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值