1

我正在尝试围绕 PHP OOP 进行思考,在阅读了所有我能理解的内容之后,我完全理解它是如何工作的,但是在我投入太多时间来学习改变我的内联程序习惯之前,我想确保它甚至可以完成我所需要的或者如果我偏离轨道。

我有一个 PHP / MySQL 站点,该站点最初是一个辅助项目,但发展迅速,我正在努力确保我的技能能够跟上。该网站有用户和公司。用户端是相当静态的,我能够用我的新手 PHP 技能处理显示内容的微小变化。在公司方面,我试图为他们喜欢的公司定制它,但我很快意识到我遇到了问题,因为现在每个公司有 50 页代码正在被修改,然后根据公司想要的内容转储到文件夹中在他们的网站上。因此,每次有公司加入时,我都会将以前的公司文件复制到我的 Web 根目录中的一个新文件夹中,并为他们定制了一堆东西。一世' 我已经在大多数页面中添加了一些功能,以将页面数量缩小到大约 20 个,但我的问题是 OOP 是否可以让我一路回到我只维护一个站点的地方,这就是 OOP 的目的吗?我有像 javascript(如下所示)这样的东西,它们会根据客户在他们的网格系统中的需求而变化。有人可以帮助我了解我应该在这里学习的基础知识吗?我应该学习使每个页面成为一个大对象并在该对象中包含下面的 javascript,还是仅适用于 PHP 的 OOP,并且每次客户来访时,我都会被至少几页代码困在一个新文件夹中或我只是限制可以定制的内容吗?我不害怕学习新东西,只是想确保我走在正确的轨道上,而且我所处的洞很快就会变得更深,所以时间很短。感谢您对这个概念的任何帮助。我觉得我缺少一些基本的理解......

var mygrid;         
            function doInitGrid(){  
            mygrid = new dhtmlXGridObject('gridbox');
            var combo=mygrid.getCombo(4);
            combo.put(2, 'Approve / Deny');
            combo.put(1, 'Approve');
            combo.put(0, 'Deny');
            mygrid.setImagePath("../codebase/imgs/");           
            mygrid.setHeader("Submit Date, Manufacturer, Product Category, Progress, Approval Status",null,["text-align:center;","text-align:center;","text-align:center","text-align:center","text-align:center"]);        
            <!--mygrid.attachHeader("#text_filter,#text_filter,#text_filter");-->
            mygrid.setInitWidthsP("10,16,44,18,12");
            mygrid.setColAlign("center,left,left,center,center");
            mygrid.enableAutoWidth(false);
            mygrid.setColTypes("ro,ro,ro,button,coro");
            mygrid.setColSorting("str,str,str,str,str,str");
            mygrid.enableRowsHover(true,'grid_hover');              
            mygrid.setSkin("modern");
            mygrid.init();          
            mygrid.setStyle("font-size:11px;","font-size:11px;","font-size:11px","font-size:11px","font-size:11px");
            mygrid.loadXML("connector.php?hospid=<?php echo $hospid; ?>");
            mygrid.setColumnIds("date,man_name,group,approval_progress, approval_status");          
            var dp = new dataProcessor ("connector.php?hospid=<?php echo $hospid; ?>");     
            dp.init(mygrid);                        
            dhxWins = new dhtmlXWindows();
            dhxWins.setImagePath("../codebase/imgs/");          
            mygrid.attachEvent("onRowSelect", function(id,ind){ 
                 if (ind == 0 || ind == 1 || ind == 2 || ind == 3){  
                dhxWins = new dhtmlXWindows();
                var w1 = dhxWins.createWindow("w1", 60, 60,925, 575);
                dhxWins.setSkin("dhx_web");
                dhxWins.setImagePath("../codebase/imgs/");
                w1.centerOnScreen();
                w1.setText("");
                w1.setModal(false);
                theVar11 = (id);
                w1.attachURL("pop_details.php?var1=" +theVar11);
                return true;
                 };
                 });
4

2 回答 2

3

我尝试阅读您的问题(啊,文字墙!没有空行,没有要点,没有总结!)据我了解,您最大的问题似乎不是 PHP 和 OOP,而是项目管理。

您正在尝试为 50 家公司管理一个项目,他们都需要一些不同的东西,并且您在代码重用/复制粘贴代码以及更新所有代码方面遇到了问题。

解决方案可能分为两部分:对于第一部分,大多数人会建议您使用源代码版本控制系统,例如 git、svn 或 cvs。这将允许您对代码进行版本控制、创建分支并合并它们。通过这种方式更新旧代码要容易得多。

代码重用的第二个解决方案确实是OOP。您需要决定哪些功能是通用的,应该放在单独的(可重用)模块中,哪些功能是公司特有的,不会被重用。一旦它被重用,将代码分成一个模块。

认为您不是为自己或公司编写代码,而是为必须使用您的代码的其他开发人员团队编写代码可能会有所帮助。分离代码并记录 API。

于 2012-04-10T07:35:14.270 回答
2

我会说 OOP 在这里非常方便!

首先,您希望将所有 HTML 页面与 PHP 页面分开。为自己减少混乱。

其次,我的 PHP 创建了一个具有主要配置文件功能的父类。这将在以后为您工作,因为您可以将一些参数传递给您的类,这些参数将更新您的用户配置文件的所有相关信息。

在与您似乎倾向于使用的大型站点合作时,作为开发人员的工作将更容易遵循 MVC 系统或创建自己的系统。

作为您的案例的示例,创建一个名为Profile.class.php

class Profile
{
   public function __construct() {}

   public function updateUser($user)
   {
       // run code to update 1 user here
   }
}

在您的profile.php页面中

你可以有类似的东西

$obj = new Profile();

if ($_GET['update']) {
   $obj->updateUser($_SESSION['user']);
}

这就是您能够从 OOP 方法中受益的方式。

这是你的选择。

于 2012-04-10T07:34:04.003 回答