【问题标题】:PHP framework ( Zend, cakephp, symfony ) for asp.net background?用于 asp.net 背景的 PHP 框架(Zend、cakephp、symfony)?
【发布时间】:2012-01-02 09:40:47
【问题描述】:

不要把它当作另一个问题的重复。我也看到了其他问题,但我主要关心的是不同的。

我来自asp.net 背景。我习惯于面向对象编程。

那么,考虑到我的 C# 背景、asp.net 方法、windows 平台和我在 php 上的开始(准备学习任何东西的条件),我应该使用哪个 php 框架?

我最初的挖掘喜欢 Zend,但我想问问 stackoverflow.com 的专家。

drupal、wordpress、joomla 的问题相同。

或者我应该退出 php 并开始学习 Ruby on Rails 吗? ;)

【问题讨论】:

  • 我想要有偏见的答案。不要把我和每个人的优点和缺点混为一谈:)
  • 我不确定这个问题是否有意义。两件事:PHP 的字符串库不是面向对象的,而且 PHP 不将字符串视为隐式对象。没有任何框架可以改变这一点。你能想出的最好的是一个带有自己的 OOP 字符串库的框架......我相应地编辑了标题,如果它不是你想要的,请随时编辑或回滚
  • 我认为他正在寻找一个字符串操作类,该类在构造函数中将字符串作为参数,并且该类的每个方法都在该字符串上进行操作
  • 毫无意义的努力。无论是substr(arg1, arg2, arg3) 还是$obj->subString(string, arg2, arg3) 都只是一个命名约定。您可以将 PHP 的字符串函数(几乎是 C 的完全相同的副本)包装在一个类中并自己创建“对象”接口。或者,既然你不喜欢它,那就试试 RoR,玩得更开心。
  • 对不起,我用错误的方法问了这个问题。我混合了两件事。我对 substr(arg1,arg2,arg3) 很好,但只是想知道 php 是否有类似 C# 的想法。

标签: php frameworks


【解决方案1】:

我知道 CakePHP 使用 String 类,并且大部分库都是面向对象的。我不知道这是否适合您,但可以尝试一下!

但是你不能在 PHP 中使用像 "string".doSomething() 这样的东西,你必须手动创建像 new String("string")->doSomething() 这样的实例

【讨论】:

  • 应该是new String("string")->doSomething()
  • 对了,好久没用PHP了,正在编辑,谢谢。
  • 你确定这有效吗?我尝试了构造 $x = new String()->doSomething() 并得到了语法错误。
  • AFAIK 此类语法仅适用于目前为 RC4 的 PHP 5.4。
【解决方案2】:

我倾向于使用的框架是 Lithium 和 CakePHP。

Lithium 从头开始​​构建为 PHP 5.3+ 原生版本 - 因此它速度极快且效率极高。客观地说,我绝对比 Cake、Zend、Symfony、Yii 等更喜欢它。此外,Lithium 是由负责 Cake 存在的人创建的(它最初是 Cake3,但它是如此不同,以至于它完全分裂成自己的项目)。

锂有点痛的一个领域是缺乏一般社区。您可以通过 IRC 获得很好的支持,并且开发人员非常乐于助人 - 但它也没有像 Cake 和 Zend 这样的“大男孩”所拥有的以下或详尽的文档,这是一种耻辱。

我对 Cake 2 也很满意,因为它对 PHP 5.2.8+ 进行了大量的改进(但它仍然不完全是 5.3+ 原生的)。他们还修改了疯狂的约定,以便它们现在实际上具有逻辑和一致的意义(在 2.0 之前,约定从模型到视图再到控制器完全不一致)。 Cake 的文档记录也比 Lithium 和(我觉得)甚至 Zend 都要好。

综上所述,Zend 几乎是现状。我不再使用它,因为它非常缓慢且性能不佳。但是,当您有一个专门为弥补早期 PHP 版本中的弱点而创建的大型框架时,就会发生这种情况。我正在密切关注 Zend 2(目前处于测试阶段),因为主要关注点似乎是努力充分利用 PHP 5.3(仅供参考,它允许 lambdas、魔术方法和所有方式其他很棒)。

所以我的偏见是:截至目前,锂会杀死其他一切。不是一点点,而是很多。

Cake 2 排在第二位(没有完全优化 PHP 5.3)。我什至不会考虑接触 Zend 1.xx,但是一旦 Zend 2 正式可用并准备好生产,它绝对值得好好认真看看(不幸的是,这可能需要几个月的时间)。

【讨论】:

  • 终于开始学习yii了。这看起来不错的样子。其实很好。
【解决方案3】:

我不确定是否有可靠的PHP框架与asp有很多相似之处,但是以“面向对象”为参数我会推荐你​​Yii。它几乎完全是面向对象的。它是“大人物”(zend、cake、codeigniter、symphony)中最新鲜的 php 框架,它构建在 PHP 5 的顶部,在“面向对象”方面有重大改进。它适用于 ORM。它有很多优点,而且发展得如此之快。看看吧:http://www.yiiframework.com

顺便说一句,Yii 可能是与 Rails 最相似的 php 框架,所以你在去那里之前可能会先了解它。

【讨论】:

  • zend、cakephp、symphony 不支持 php 5 吗?
  • 是的,他们当然会。但作为最新的,我的感觉是 Yii 是基于它构建的,而不是更新到它。
  • 这是一个好点 :) 相信我,我下载 yii 框架只是因为你。我不知道它是一个 php 框架。并且肯定会调查它。演示看起来不错。谢谢你的时间:)
  • 哦!别客气。很高兴知道你会试一试。我已经使用它大约一年了,而且效果很好。如果您不喜欢它,我会发现很难向您推荐任何其他 php 框架,而我的建议将改为使用 rails。
【解决方案4】:

可能需要自己构建这个类,大致如下:

Manipulating Strings, OO Style - PHP Tutorials | Dream.In.Code

然后,您可以将此类与任何代码一起使用,无论是否有框架。 [编辑评论:我恰好偏爱 Zend Framework]

有了不错的自动加载,它应该很简单:

$greeting = new MyString('hello')
$upperGreeting = $greeting->toUpper(); // $upperGreeting == 'HELLO'

如果这感觉太麻烦,那么您可以在您的类中创建一个静态的create() 方法,这样您就可以很容易地链接它:

$upperGreeting = String::create('hello')->toUpper(); // $upperGreeting == 'HELLO'

【讨论】:

    【解决方案5】:

    Agile Toolkit 是一个PHP UI 框架,带有面向对象的用户界面。以递归方式呈现对象时会生成纯 HTML。 jQuery 和 jQuery UI 小部件用于增强输出和实现 AJAX。

    这是一个简单的代码 sn-p 演示如何实现和增强 CRUD:

    class page_users extends Page {
        function page_index(){
    
            $crud=$this->add('CRUD');
            $crud->setModel('User',null,array('id','email','name','status'));
            if($crud->grid){
                $crud->grid->addColumn('expander','more','More...');
            }
        }
        function page_more(){
            $tt=$this->add('Tabs');
            $tabs=$this->add('Tabs');
            $tab=$tt->addTab('BasicInfo');
            $tab->add('MVCForm')->setModel('User')->loadData($_GET['id']);
    
            $tabs->addTabURL('../password','Password');
            $tabs->addTabURL('../activity','Activity');
            $tabs->addTabURL('../engage','Engage');
        }
    }
    

    界面基于 jQuery UI CSS 框架,因此可以使用 Themeroller 进行主题化。与 HTML、JS 或 AJAX 的交互由 Agile Toolkit 处理,但可以由开发人员增强或替换。上面的代码单独会产生这个:

    对象结构设计精良,可用于各大网络项目。 Agile Toolkit 在开源许可下可用。

    另见:

    我是这个精彩工具包的one of the authors

    【讨论】:

      【解决方案6】:

      PHP 不能以这种方式工作。 PHP 使用 .用于连接 if 字符串('string 1' . 'string 2')。您可能想寻找一个支持链接的框架,即$a()->b()->c();,但即便如此,您也必须以“PHP 方式”调用本机函数。

      【讨论】:

      猜你喜欢
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 2011-03-20
      • 2010-11-16
      • 1970-01-01
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多