ホームページ  >  記事  >  バックエンド開発  >  PHPの_initialize()関数と__construct()関数の違いの説明

PHPの_initialize()関数と__construct()関数の違いの説明

不言
不言オリジナル
2018-08-18 11:35:1815730ブラウズ

この記事では、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(&#39;username&#39;)){
            $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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。