質問

私のサイトはかなり大きく、PHPクラスを使用していません。サイトを使用するためにサイトを書き直すのに十分なほどよくわかりませんが、クラスが使用する__ autoload($ class_name)機能を本当に使用したいと思います。私は関数に大きく依存しており、さまざまな関数ファイルを持っています。
フォーラム.inc.php
blogs.inc.php
user.inc.php
写真株式会社.php
一般.inc.php

general.inc.php にはすべてのページに存在する必要がある関数があることを除き、これらのファイルはすべてサイトの特定の部分に固有の関数にすぎません。

とにかく、自動ロードを使用するか、これらの関数ファイルをロードする同様のものを作成することはできますか?一度、URLにフォーラムという単語が含まれている場合、フォーラム関数ファイルをロードするなど、URLに基​​づいてそれを行うことを考えましたが、フォーラムに関連するファイルにはURLにフォーラムという単語が含まれていないため、これは常に機能するとは限りません。

すべての関数をクラスに入れるのに十分な OO のコーディングを学ぶまで、選択肢はほとんどないのでしょうか?

//example of the autoload 
function __autoload($class_name){
    include('classes/' . $class_name . '.class.php');
}
$time = new time();
$time->fn1();
役に立ちましたか?

解決

正直に言うと、簡単な方法ではできないと思います。いずれにせよ、ユーティリティ クラスを使用した方がずっと良いと思いませんか?OOP には何もありません。これを見てください。

<?php
    class HTMLUtil {

        public static function filter($str) {...}
        public static function entities($str) {...}
        public static function encode($str) {...}
        ...etc...
    }
?>

関連する機能をグループ化する静的ヘルパー/ユーティリティ クラスは簡単にまとめることができ、関数を次のように宣言するだけです。 static:

クラスのメンバーまたはメソッドを静的と宣言すると、クラスのインスタンス化を必要とせずにアクセスできます。

今すぐ使用できます __autoload. 。静的関数を使用するためにこれらのクラスをインスタンス化する必要はなく、コードが (多少冗長になったとしても) 読みやすくなります。私はいつも次のようなことをするほうが満足できると感じています。

echo HTMLUtil::filter($str);

の代わりに:

echo filter($str); //scary filter function, where are you from?

必要に応じて、ユーティリティ クラスでプライベート コンストラクターを宣言してインスタンス化を防ぎ、それらが「関連する関数の単なる束」であることを強調することもできます。

private __construct() {...}

同じクラス内の別の関数から静的関数を呼び出すには、 self キーワード (同じものを参照します) クラス, 、ではありません 物体 または クラスインスタンス):

public static function foo()
{
    echo self::bar() . '..and some foo';
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top