V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  dvaknheo  ›  全部回复第 12 页 / 共 14 页
回复总数  270
1 ... 4  5  6  7  8  9  10  11  12  13 ... 14  
@random0O
怪不得 JavaBean 这么流行

String getName(){ return this.name; } 就解决了?
2019-08-11 17:17:01 +08:00
回复了 jamfer 创建的主题 程序员 头条搜索来了, v2 没人聊么
有什么用, 在 PC Web 上搜,跳到 头条 App ?
@Rocka firefox 不能渲染 winding 字体。
2019-07-27 17:23:00 +08:00
回复了 hbolive 创建的主题 PHP PHP 中变量的命名,你们是用驼峰法还是下划线?
一般用驼峰。

下划线公开方法用于不推荐但不得不公开的方法, 如回调。

下划线公开成员用于来自配置的变量,配置里用下划线。
2019-07-22 12:34:34 +08:00
回复了 dvaknheo 创建的主题 PHP 小调查:你希望要什么样的框架?
@vincel PHP 必须解析 XML 才能开工? 那么 PHP 快速开发的趋势在哪。
有名的东西,并不见得优秀,Smarty 祸害了多少年?
问题是很多框架让作者把时间花在框架的理解上而不是核心代码上。
这就是我为什么提到的 优秀的框架, 和框架耦合的代码越少越好。

规模大,是因为额外需求多才大。不要想着用户要有那么多非核心需求先。
比如数据库,就不应该是框架的核心。
比如 .env 的解析这也不应该是框架的核心。

核心+扩展组件,扩展组件可以单独用,这才是最好的方式。
2019-07-20 12:13:27 +08:00
回复了 dvaknheo 创建的主题 PHP 小调查:你希望要什么样的框架?
@wnh3yang slim 用了下面几个组件
container-interop pimple 处理 DI

monolog 做 Log 处理
fast-route 做 路由。


psr container http-message log // 这一堆现在的 PHP 框架都等着进官方扩展的。

slim /phpview 做模板,不用也可以
2019-07-20 12:05:47 +08:00
回复了 dvaknheo 创建的主题 PHP 小调查:你希望要什么样的框架?
@jourdon 可以把那些组件单独拿出来,不要耦合太紧
2019-07-20 11:59:00 +08:00
回复了 dvaknheo 创建的主题 PHP 小调查:你希望要什么样的框架?
迁移方便。 我不希望我代码和框架有太多耦合。

混用方便, 即 其他框架嵌入我的框架很容易。或我的框架嵌入其他框架也很容易
2019-07-07 18:08:30 +08:00
回复了 louislivi 创建的主题 PHP SMProxy 新版本中将新增状态监控了!
虽然看不懂,看上去很厉害的样子
2019-07-06 16:08:14 +08:00
回复了 huangzhhui 创建的主题 PHP 🚀 Hyperf v1.0 发布,全新企业级的 PHP 协程微服务框架
搞得太复杂了,没文档没法看懂
他说的是设置 .htaccess 吧,配置 path_info
2019-07-06 16:03:56 +08:00
回复了 dvaknheo 创建的主题 PHP thinkphp 的 db 类能剥离出来使用么
@duola 不认识。上次在 github 讨论议题里加了这个需求,没见回应。


```
class MedooFixed extends \Medoo\Medoo
{
public function exec($query, $map = [])
{
if (isset($map[0])) {
array_unshift($map, null);
unset($map[0]);
}
return parent::exec($query, $map);
}
}
```
这就可以 $medoo->exec("select * from table_name where name=? and des=? " ,['a','b']);
方便多了
@doyouhaobaby 问题是,这解决了什么问题,“优雅” ?

不,是一群 JAVA 化的人员把大家带入的坑而已。
psr6 和 psr16 的故事。


如果坑了足够多的人,就可以让以后的学习者不得不捏着鼻子用。

中间件明明可以用两个接口,before ,after,却为了优雅,函数化,做成了一个。
不去考虑是否方便调试。
这背离了 PHP 方便,快速开发的初衷。

public function handle($request, Closure $next)
{
////
return $next($request);
}
再来个调试方面的问题,你能从堆栈里看出什么信息么?

#0 xx\Action\HomeAction->main() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/nimo/Traits/HandlerTrait.php:20]
#1 Lit\Nimo\Handlers\AbstractHandler->handle() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/voltage/RouterDispatchHandler.php:30]
#2 Lit\Voltage\RouterDispatchHandler->main() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/nimo/Traits/HandlerTrait.php:20]
#3 Lit\Nimo\Handlers\AbstractHandler->handle() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/nimo/Traits/MiddlewareTrait.php:43]
#4 Lit\Nimo\Middlewares\AbstractMiddleware->delegate() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/nimo/Middlewares/MiddlewarePipe.php:75]
#5 Lit\Nimo\Middlewares\MiddlewarePipe->loop() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/nimo/Middlewares/MiddlewarePipe.php:28]
#6 Lit\Nimo\Middlewares\MiddlewarePipe->Lit\Nimo\Middlewares\{closure}()
#7 call_user_func() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/nimo/Handlers/CallableHandler.php:38]
#8 Lit\Nimo\Handlers\CallableHandler->main() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/nimo/Traits/HandlerTrait.php:20]
#9 Lit\Nimo\Handlers\AbstractHandler->handle() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/nimo/Traits/MiddlewareTrait.php:43]
#10 Lit\Nimo\Middlewares\AbstractMiddleware->delegate() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/nimo/Middlewares/MiddlewarePipe.php:75]
#11 Lit\Nimo\Middlewares\MiddlewarePipe->loop() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/nimo/Middlewares/MiddlewarePipe.php:65]
#12 Lit\Nimo\Middlewares\MiddlewarePipe->main() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/nimo/Traits/MiddlewareTrait.php:33]
#13 Lit\Nimo\Middlewares\AbstractMiddleware->process() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/nimo/Middlewares/MiddlewarePipe.php:78]
#14 Lit\Nimo\Middlewares\MiddlewarePipe->loop() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/nimo/Middlewares/MiddlewarePipe.php:28]
#15 Lit\Nimo\Middlewares\MiddlewarePipe->Lit\Nimo\Middlewares\{closure}()
#16 call_user_func() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/nimo/Handlers/CallableHandler.php:38]
#17 Lit\Nimo\Handlers\CallableHandler->main() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/nimo/Traits/HandlerTrait.php:20]
#18 Lit\Nimo\Handlers\AbstractHandler->handle() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/nimo/Traits/MiddlewareTrait.php:43]
#19 Lit\Nimo\Middlewares\AbstractMiddleware->delegate() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/bolt/Middlewares/EventsHub.php:57]
#20 Lit\Bolt\Middlewares\EventsHub->main() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/nimo/Traits/MiddlewareTrait.php:33]
#21 Lit\Nimo\Middlewares\AbstractMiddleware->process() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/nimo/Middlewares/MiddlewarePipe.php:78]
#22 Lit\Nimo\Middlewares\MiddlewarePipe->loop() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/nimo/Middlewares/MiddlewarePipe.php:28]
#23 Lit\Nimo\Middlewares\MiddlewarePipe->Lit\Nimo\Middlewares\{closure}()
#24 call_user_func() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/nimo/Handlers/CallableHandler.php:38]
#25 Lit\Nimo\Handlers\CallableHandler->main() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/nimo/Traits/HandlerTrait.php:20]
#26 Lit\Nimo\Handlers\AbstractHandler->handle() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/nimo/Traits/MiddlewareTrait.php:43]
#27 Lit\Bolt\Middlewares\RequestContext->delegate() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/bolt/Middlewares/RequestContext.php:35]
#28 Lit\Bolt\Middlewares\RequestContext->main() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/nimo/Traits/MiddlewareTrait.php:33]
#29 Lit\Bolt\Middlewares\RequestContext->process() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/nimo/Middlewares/MiddlewarePipe.php:78]
#30 Lit\Nimo\Middlewares\MiddlewarePipe->loop() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/nimo/Middlewares/MiddlewarePipe.php:65]
#31 Lit\Nimo\Middlewares\MiddlewarePipe->main() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/nimo/Traits/MiddlewareTrait.php:33]
#32 Lit\Nimo\Middlewares\AbstractMiddleware->process() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/bolt/BoltApp.php:60]
#33 Lit\Bolt\BoltApp->main() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/nimo/Traits/HandlerTrait.php:20]
#34 Lit\Nimo\Handlers\AbstractHandler->handle() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/zendframework/zend-httphandlerrunner/src/RequestHandlerRunner.php:95]
#35 Zend\HttpHandlerRunner\RequestHandlerRunner->run() called at [/mnt/d/MyWork/sites/zzz/z/myproject/vendor/litphp/runner-zend-sapi/BoltZendRunner.php:21]
#36 Lit\Runner\ZendSapi\BoltZendRunner::run() called at [/mnt/d/MyWork/sites/zzz/z/myproject/public/index.php:9]

顺便对比 DNMVCS 的:

#0 MY\Controller\Main->index() called at [/mnt/d/MyWork/sites/DNMVCS/src/Core/Route.php:190]
#1 DNMVCS\Core\Route->run() called at [/mnt/d/MyWork/sites/DNMVCS/src/Core/App.php:246]
#2 DNMVCS\Core\App->run() called at [/mnt/d/MyWork/sites/DNMVCS/src/Core/App.php:87]
#3 DNMVCS\Core\App::RunQuickly() called at [/mnt/d/MyWork/sites/DNMVCS-FullTest/public/index.php:13]

都是在控制器方法里加这段代码

echo '<pre>';
debug_print_backtrace(2);
echo '</pre>';exit;
@mcfog 不以解决问题为导向的 PHP 代码都不是好代码。

回头看了 phptherightway 的中文版,不是老外的月亮就圆。

如果不为了解决 耦合 问题, 那么需要 DI 么?

尽管 PHP 不断升级为成熟的、面向对象的语言,但它作为模板语言 没有改善多少。编译模板,比如 Twig 或 Smarty* ,提供了模板专用的新语法,填补了这片空白。

Smarty 都死了多少年了?
Apache 和 PHP —— 用 apache 的都是老项目了。
DNMVCS 卖点之一是: 如果你写代码引用到 DNMVCS 的类,说明要么就是你作为老大,不得不用到,要么就是你想法有问题,小弟不要去引用 框架里的代码。
这样你切换成其他框架都容易。
DNMVCS 不引用任何第三方类库。也是卖点,稳定,不会因为第三方有问题而连带出问题。

当然,DNMVCS 最基本的思想就是 把业务逻辑要放到 service 里。 不会导致 controller 或 model 层 上千行代码
Air , Bolt , Nexus ,Nimo 这些命名,你又不是要作为很通用的组件,何必让用户难理解
再说入口文件 Voltage 里的 hello_world :

```php
require_once __DIR__ . '/../vendor/autoload.php';

class HelloAction extends AbstractAction
{
public function __construct()
{
$this->responseFactory = new ResponseFactory();
}

protected function main(): ResponseInterface
{
return $this->json()->render([
'hello' => 'world',
'method' => $this->request->getMethod(),
'uri' => $this->request->getUri()->__toString(),
]);
}
}

$app = new App(new HelloAction());

$request = ServerRequestFactory::fromGlobals();
$response = $app->handle($request);
$emitter = new SapiEmitter();
$emitter->emit($response);

```

搞这么复杂,你瞧瞧 DNMVCS 就很简单了

```php
<?php
require(__DIR__.'/../headfile/headfile.php');

$options=[];
if (defined('DNMVCS_WARNING_IN_TEMPLATE')) {
$options['is_dev']=true;
$options['skip_setting_file']=true;
echo "<div>Don't run the template file directly </div>\n";
}

$path=realpath(__DIR__.'/..');
$options['path']=$path;
$options['namespace']='MY';
\DNMVCS\DNMVCS::RunQuickly($options, function () {
});
```
看了一下,没什么卖点啊。
DI 机制不就是个大数组,可以替换框架里的组件。
现在没有“能在不改变源代码情况下 替换原先组件”的 框架是不合格的。

而且这个框架 ,看上去入门没一眼就能用
1 ... 4  5  6  7  8  9  10  11  12  13 ... 14  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2323 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 26ms · UTC 03:23 · PVG 11:23 · LAX 20:23 · JFK 23:23
Developed with CodeLauncher
♥ Do have faith in what you're doing.