1

私はPHP OOPに頭を悩ませようとしています.すべてを読んだ後、それがどのように機能するかを完全に理解することができます.または、私が軌道から外れている場合。

サイド プロジェクトとして開始した PHP / MySQL サイトを持っていますが、急速に成長しており、自分のスキルが維持できるように努めています。サイトにはユーザーと企業があります。ユーザー側はかなり静的で、初心者の PHP スキルで表示内容の小さな変更を処理できます。会社側では、彼らが愛する会社のために非常にカスタマイズできるようにしようとしましたが、すぐに問題があることに気付きました。会社ごとに 50 ページのコードが変更され、会社が望むものに基づいてフォルダーにダンプされていたからです。彼らのサイトで。そのため、会社が参加するたびに、以前の会社のファイルを Web ルートの新しいファイル フォルダーにコピーし、それらのためにたくさんのものをカスタマイズしました。私' ほとんどのページにいくつかの機能を追加して、ページ数を約 20 に絞り込みましたが、私の質問は、OOP を使用すると、1 つのサイトを維持しているだけの場所に戻ることができるかということです。それが OOP の目的ですか? 私は、顧客がグリッド システムで何を望んでいるかに基づいて変化する JavaScript (以下に示す) のようなものを持っています。ここで学ぶべきことの基本を理解するのを手伝ってくれる人はいますか? 各ページを 1 つの大きなオブジェクトにして、そのオブジェクトに以下の 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 社のプロジェクトを管理しようとしていますが、すべての企業がいくつかの異なるものを必要としており、すべてのコードを更新すると同時にコードの再利用/コピー貼り付けに問題があります。

解決策は2 つの部分からなる可能性があります。最初の部分では、ほとんどの人がgit、svn、cvs などのソースコードバージョン管理システムを使用することをお勧めします。これにより、コードのバージョン管理、ブランチの作成、マージが可能になります。これにより、古いコードの更新がはるかに簡単になります。

コードを再利用するための 2 つ目の解決策は、まさに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 に答える