この記事では、PHP の _initialize() 関数と __construct() 関数の違いについて説明します。一定の参考値があります。必要な友人は参照してください。お役に立てれば幸いです。ヘルプ。
_initialize() メソッドは、もちろんメソッドを実行する前に実行する必要があります。 __construct コンストラクター。 つまり、_initialize() 関数がある場合、オブジェクトのいずれかのメソッドを呼び出すと、_initialize() 関数が自動的に呼び出され、__construct() コンストラクターはオブジェクトの作成時に 1 回だけ呼び出され、他のメソッド呼び出しとは何の関係もありません。
#ここでのconstructは二重ダッシュで、_initialize()関数は単一ダッシュです
親クラスと子クラスの両方に_initialize()関数がある場合、子クラスは親クラスをオーバーライドします。 If サブクラスにはそれがなく、親クラスにはある場合、サブクラスは親クラスからそれを継承します。
デフォルトでは、サブクラスのコンストラクターは親クラスのコンストラクターを自動的に呼び出しません。サブクラス オブジェクトの _initialize() を呼び出す場合、親クラスの _initialize() は自動的に呼び出されません。
実際にサブクラスのコンストラクターを記述する場合は、通常、親クラスのコンストラクターを追加する必要があります。 parent::__construct() を積極的に呼び出します。そうしないと、非オブジェクトのメンバー関数 assign() の呼び出しなど、サブクラス オブジェクトの null ポインター例外が発生します。
したがって、一部のシステム バックグラウンド管理またはコメント関数では、関連するコントローラーをベース コントローラーに拡張できます:
Base.php:
<?php namespace app\admin\controller; use think\Controller; class Base extends Controller { public function _initialize(){ if(!session('username')){ $this->error('请先登录系统!','Login/index'); } } }
Article.php
<?php namespace app\Admin\controller; use app\Admin\model\Article as ArticleModel; use app\admin\controller\Base; class Article extends Base { ……… ……… }
このように、Article コントローラーのメソッドが実行されると、オブジェクトを作成せずに、Base.php の _initialize() メソッドが最初に実行され、ログインしたかどうかが検出されます。
関連する推奨事項:
php のexplode() 関数と strtok() 関数の違い
##method_exists( php ) および is_callable() 関数の分析
以上がPHPの_initialize()関数と__construct()関数の違いの説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。