6

私のサイトはかなり大きく、PHP クラスを使用していません。OO を十分に理解していないため、サイトを書き直して使用することはできませんが、クラスが使用する __autoload($class_name) 機能を使用したいと思っています。私は関数に大きく依存しています。さまざまな関数ファイルがあります
。forums.inc.php
blogs.inc.php
user.inc.php
photos.inc.php
general.inc.php

これらのファイルはすべて、サイトの特定の部分に固有の関数にすぎません。ただし、general.inc.php には常にページに配置する必要がある関数があります。

とにかく、オートロードを使用したり、これらの関数ファイルをロードする同様のものを作成したりできますか? URLにフォーラムという単語が含まれている場合、フォーラム関数ファイルをロードしますが、フォーラムに関連するファイルにはフォーラムという単語が含まれていないため、これは常に機能するとは限りません。 .

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

//example of the autoload 
function __autoload($class_name){
    include('classes/' . $class_name . '.class.php');
}
$time = new time();
$time->fn1();
4

1 に答える 1

8

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

<?php
    class HTMLUtil {

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

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

クラス メンバーまたはメソッドを 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';
}
于 2009-09-08T02:01:16.207 に答える