leancloud / php-sdk

LeanCloud PHP SDK
Apache License 2.0
53 stars 23 forks source link

更名 Object 类来兼容 PHP 7.2 #174

Closed jysperm closed 6 years ago

jysperm commented 6 years ago

PHP 7.2 中将 Object 列为了保留关键字,导致我们的 SDK 无法工作(之前版本因为我们的 Object 在命名空间里没关系,但新版本在命名空间里也不行了),详见 https://github.com/leancloud/php-sdk/issues/173

所以这个类肯定是要改名,但还有一个问题是只改 Object -> LCObject,还是给所有的类都加 LC 前缀(或者 Lean 前缀)?

PS. PHP SDK 在早期版本所有类都是有 Lean 前缀的,在 0.4 中去掉了前缀 https://github.com/leancloud/php-sdk/pull/102

jysperm commented 6 years ago

目前决定全部都改,加 LC 前缀。

需要用户实例化的类:ACL、User、Role、Bytes、Object、File、Relation、Query、GeoPoint、Push、SaveOption、Engine\FunctionError、Engine\{Lean,Laravel,Slim}Engine、Storage\{Cookie,Session}Storage

不需要用户实例化的公开类:BatchRequestError、CloudException、Region、SMS、Client、Engine\Cloud

非公开类:AppRouter、MIMEType、Operation\IOperation、Operation\{Array,Delete,Increment,Relation,Set}Operation、Storage\IStorage、Uploader\{Simple,S3,Qiniu,QCloud}Uploader

jysperm commented 6 years ago

我尝试性地给所有类加 LC 前缀,代码实在是不太好看:

use \LeanCloud\Engine\LCSlimEngine;
use \LeanCloud\LCQuery;
use \LeanCloud\LCObject;
use \LeanCloud\LCClient;

$app = new \Slim\App();

LCClient::setStorage(new LCCookieStorage());
LCSlimEngine::enableHttpsRedirect();

$app->add(new LCSlimEngine());

use \LeanCloud\Engine\LCCloud;
LCCloud::run("averageStars", $params);

于是我就想,如果我们接受了「有命名空间的语言不加前缀更好」的设定,我们可以只去解决 Object 的冲突,比如只把 Object 改成 LeanObject,这个 Lean 并不是一个前缀,只是对 Object 的一个特殊处理,从语义上来讲,Object 作为我们 SDK 最基础的组件,特殊一点也是说得通的。

如果只改 Object 的话,可能可以做到在 7.2 以下继续兼容原来的 Object(通过一些运行时黑科技),这个还需要继续调研一下。

jysperm commented 6 years ago

0.8.0 已发布 https://github.com/leancloud/php-sdk/releases/tag/v0.8.0