博客列表 >10月10日作业,写一个分级的命名空间, 并实现类的自动加载。写一个trait类,数据库一条数据!

10月10日作业,写一个分级的命名空间, 并实现类的自动加载。写一个trait类,数据库一条数据!

星空的博客
星空的博客原创
2019年11月05日 14:15:30513浏览

一、写一个分级的命名空间, 并实现类的自动加载,

分级命名空间,创建如下代码类:

实例

<?php
namespace _1010\one\two\three;

class Test1
{
    public static function demo1()
    {
        return '原理是这样';
    }
}

class Test2
{
    public static function demo2()
    {
        return '请问你在干什么';
    }
}

class Test3
{
    public static function demo3()
    {
        return '你好啊';
    }
}

运行实例 »

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

在另一个脚本中引入,这个脚本,再用use 创建

实例

<?php
//命名空间的别名引用
namespace _1010;

include __DIR__.'/test.php';

//use 如果省略as,那么当前类的别名就是当前类去掉空间名称的类名
//use 默认从全局开始,可以省略掉:\,as 给当前的空间名称起一个别名;

use _1010\one\two\three\Test1;
echo Test1::demo1();
echo '<hr>';

use _1010\one\two\three\Test2;
echo Test2::demo2();

echo '<hr>';
use _1010\one\two\three\Test3;
echo Test3::demo3();

运行实例 »

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

image.png

二、写一个trait类, 理解它的功能与使用场景


实例

<?php
namespace _1010;

use PDO;

//trait是个方法集,可以当父类来使用
trait Db
{
    //连接数据库
    public function connect($dsn, $username, $password)
    {
        return new PDO($dsn, $username, $password);
    }
}

    trait Create //创建一个添加数据的方法trait类库
{
        public function get($data)
        {
            $table='student';
            //字段列表
            $fields=' ( name, course, grade) ';
            //值列表
            $values=' (:name, :course, :grade) ';
            $sql=' INSERT INTO '.$table.$fields. 'VALUES' .$values;
            $stmt = $this->pdo->prepare($sql);
            $stmt->execute($data);
        }
}

//客户端调用:工作类

class Client
{
    //在宿主类中引用上面声明的二个Trait类/方法库
    use Db;
    use Create;

    public  $pdo=null;

    public function __construct($dsn,$username,$password)
    {   //调用的是Trait:Db中的方法
        $this->pdo = $this->connect($dsn, $username, $password);
    }
    //调用的是Trait:Create的方法
    public function xin($data){
        return $this->get($data);
    }


}
$dsn='mysql:dbname=myblog';
$username='root';
$password='root';

$db = new Client($dsn,$username,$password);

$data = [
    'name' => '周星驰',
    'course' => 'js',
    'grade' => 80,
];
$res = $db->xin($data);

运行实例 »

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

未执行的时候,数据库

image.png

执行后的数据库,请老师帮忙检察指导一下,谢谢

image.png


总结:朱老师,我这个trait类的方法是新增数据库数据,

但是没有优化好。测试了中是可以新加数据的。

但是没有做出能在页面中显示出来添加成功的数据。希望老师帮忙指导优化一下!谢谢

trait类,用在的场景就是复制一个类中的方法,需要用子类继承使用的时候不用真的改变其他正常父类的方法。从而方便自己团队使用!另外可以当成一个类方法的库。一个子类可以继承多个trait类的方法!


PS:今日11月5日,最近学习到larveal 框架了,都是用命名空间自动加载类的方法。目前在往这方面的视频加强学习!



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