×

php7自身类库

php7自身类库(php类自动加载原理)

admin admin 发表于2023-03-23 20:43:08 浏览66 评论0

抢沙发发表评论

本文目录一览:

php7 mongodb 扩展 真的很差吗

MongoDB\Driver\Manager::executeBulkWrite

这玩意还配置了一个巨大的类库来配合调用:就是这个: ,纯粹是脱裤子放P,多此一举,本来原生扩展就已经巨长、巨难用,还配一个根本没有简化任何代码的库有什么意义?甚至于调用这个类库比原生的名字更长、更啰嗦,而且多了一层封装就多一次bug机会。

这个库文件总共63个,看看,如果你随便写个脚本访问一下mongodb,还得包含63个文件,我TM整个项目都没有63个文件好不好?这些个写惯了java的没事就老老实实写java,都跑来写php,php是要解析执行的,又不像jvm那么编译优化执行,搞那么多文件,不影响执行速度吗?真是狗屎,所以完全不推荐用这个狗屎库。-php7自身类库

但是这个扩展最奇怪的就是文档超级简陋,根本不能获得任何有价值的信息,所以只能靠摸索来了。

下面是我用到的由MongoClient迁移到MongoDB\Driver的差异点。

MongoClient插入或更新是同样的代码:

(new MongoClient())-{$db}-{$collection}-save($arr);

// 这个$arr数组可以直接含有 "_id" 索引来指定 mongodb文档的_id值,就这么简单粗暴,这才是php啊!

MongoDB\Driver,插入和更新需要区分:

$mongo = new MongoDB\Driver\Manager();

$bulk = new MongoDB\Driver\BulkWrite(['ordered' = true]);

$data = $mongo-executeQuery('db.collection', new MongoDB\Driver\Query([]), new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY_PREFERRED))-toArray();-php7自身类库

if (empty($data[0])) { // 确定不存在,插入

$bulk-insert($arr);

} else { // 否者更新

$bulk-update([], array('$set' = $arr)); // $arr同样是刚才的数组

}

// 还没完,还要执行下一步:db.collection要替换成实际的数据库、集合名

$result = $mongo-executeBulkWrite('db.collection', $bulk, new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000));-php7自身类库

// 返回插入或更新是否成功:

$ok = $result-getInsertedCount() || $result-getModifiedCount() ? 1 : 0;

// 真是够了!

查询一条记录:

MongoClient:

(new MongoClient())-{$db}-{$collection}-findOne(['_id' = $id]);

MongoDB\Driver:

$mongo = new MongoDB\Driver\Manager();

$result = $mongo-executeQuery('db.collection', new MongoDB\Driver\Query(['_id'=$id], []), new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY_PREFERRED));-php7自身类库

// 返回的$result是一个对象,需要手动转换成数组。

查询数量时候,需要注意:

$mongo = new MongoDB\Driver\Manager();

$cursor = $mongo-executeCommand($db, new MongoDB\Driver\Command($arr), new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_SECONDARY_PREFERRED));-php7自身类库

// 这里$cursor是一个游标。需要注意$arr里的字段:

$arr = ['count'=$collection, 'query'=$query]; // 这里count必须排在前面,位置反了直接报异常。

查询结果集:

$mongo = new MongoDB\Driver\Manager();

$cursor = $mongo-executeQuery('db.collection', new MongoDB\Driver\Query($arr, $opts), new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY_PREFERRED));-php7自身类库

//注意,这里的 $arr和 $opts;

$arr = ['_id'= ['$in'= $ids] ]; // 根据id数组获取集合

$opts = ['limit'= $limit, 'skip'= $skip ]; // 不推荐

// 这里在传递$limit和$skip的时候,最好先转成整数,不然不生效:

$opts = ['limit'= (int) $limit, 'skip'= (int) $skip ]; // 推荐写法。

// 写到这里,让人怀疑是不是在用php了,怎么还需要这样的类型转换。字符串整数都不行!

基本就这样,推荐自己封装一个简单的MongoDB\Driver,而不是使用那个巨大无比的库、也不推荐直接用原生

php中什么是第三方类库

如果你直接使用的是第三方的类库包,或者是类名和后缀和ThinkPHP的默认规则不符合的,我们建议你放到第三方类库扩展目录Extend/Vendor目录下面,并使用vendor方法来导入。

例如,我们把Zend的Filter\Dir.php 放到Vendor目录下面,这个时候Dir文件的路径就是

Vendor\Zend\Filter\Dir.php,我们使用vendor方法导入就是:

Vendor('Zend.Filter.Dir');

需要注意的是,vendor方法默认导入的类库后缀是php的而不是class.php的,如果你的第三方类库的后缀是class.php,可以使用:

Vendor('Zend.Filter.Dir','','.class.php');

或者使用:

import('Zend.Filter.Dir',VENDOR_PATH);

通过使用第三方类库扩展,我们可以直接使用Zend、CI或者其他框架中的类库。

php中函数库和类库到底有什么区别?

首先你要知道什么是函数,比如这一个

is_mail($str){//判断的内容}

假如这个is_mail可以用来判断用户提交的数据是否是email格式的,这就是一个功能。判断is_mail的功能。

使用的时候只要

if(is_mail($str))

{}

else

{}

函数库

就是很多函数的集合。有很多功能,你就不用自己重新写了,直接使用就可以。

而类库,你要先理解类。

类,你可以理解为函数根据实际需求分类存放的一个地方。因为如果项目很大,就会有很多函数,如果不分类,有时候就很难找到了。根据函数的功能,把一类函数都整合到一个类里面,使用起来就很方便。

比如数据库操作类。

所有数据库操作的函数都放在里面了,你只要调用就可以了。

$db = new data();

$db-qurey();//使用$db类的qurey方法,其实就是使用qurey这个函数。

而类库,就是很多可以直接使用的类。

总而言之,函数库和类库,可以大大提升开发效率。

php有没有类库?

我想你说的库类是打包好的php框架,这是有的。

symfony,zend Framework,cakephp都提供了很多好用的库。当然还有好多。