0 追蹤者

類別 yii\i18n\GettextMoFile

繼承關係yii\i18n\GettextMoFile » yii\i18n\GettextFile » yii\base\Component » yii\base\BaseObject
實作介面yii\base\Configurable
自版本起可用2.0
原始碼 https://github.com/yiisoft/yii2/blob/master/framework/i18n/GettextMoFile.php

GettextMoFile 代表一個 MO Gettext 訊息檔案。

此類別改編自 PEAR 中 Michael 的 Gettext_MO 類別。請參考以下授權條款。

Copyright (c) 2004-2005, Michael Wallner mike@iworks.at. 保留所有權利。

再散佈和使用,無論是以原始碼或二進位格式,以及是否經過修改,只要符合下列條件皆被允許:

* Redistributions of source code must retain the above copyright notice,
  this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
  notice, this list of conditions and the following disclaimer in the
  documentation and/or other materials provided with the distribution.

本軟體由著作權持有者和貢獻者「依現狀」提供,且不帶有任何明示或暗示的擔保,包括但不限於適銷性和特定用途適用性的暗示擔保。在任何情況下,著作權所有者或貢獻者均不對任何直接、間接、附帶、特殊、懲戒性或後果性損害(包括但不限於替代商品或服務的採購;使用、資料或利潤損失;或業務中斷)負責,無論其如何發生,以及基於任何責任理論,無論是合約、嚴格責任或侵權行為(包括過失或其他),以任何方式因使用本軟體而產生,即使已被告知可能發生此類損害。

公開屬性

隱藏繼承的屬性

屬性 類型 描述 定義於
$behaviors yii\base\Behavior[] 附加到此元件的行為列表。 yii\base\Component
$useBigEndian boolean 讀取和寫入整數時是否使用 big-endian。 yii\i18n\GettextMoFile

公共方法

隱藏繼承方法

方法 描述 定義於
__call() 呼叫未定義為類別方法的具名方法。 yii\base\Component
__clone() 在透過複製現有物件建立物件後,會呼叫此方法。 yii\base\Component
__construct() 建構子。 yii\base\BaseObject
__get() 傳回組件屬性的值。 yii\base\Component
__isset() 檢查屬性是否已設定,即已定義且非 null。 yii\base\Component
__set() 設定組件屬性的值。 yii\base\Component
__unset() 將組件屬性設定為 null。 yii\base\Component
attachBehavior() 將行為附加到此組件。 yii\base\Component
attachBehaviors() 將行為列表附加到組件。 yii\base\Component
behaviors() 傳回此組件應表現為的行為列表。 yii\base\Component
canGetProperty() 傳回指示屬性是否可讀取的值。 yii\base\Component
canSetProperty() 傳回指示屬性是否可設定的值。 yii\base\Component
className() 傳回此類別的完整限定名稱。 yii\base\BaseObject
detachBehavior() 從組件中分離行為。 yii\base\Component
detachBehaviors() 從組件中分離所有行為。 yii\base\Component
ensureBehaviors() 確保在 behaviors() 中宣告的行為已附加到此組件。 yii\base\Component
getBehavior() 傳回具名行為物件。 yii\base\Component
getBehaviors() 傳回附加到此組件的所有行為。 yii\base\Component
hasEventHandlers() 傳回指示是否有名稱事件附加任何處理程式的值。 yii\base\Component
hasMethod() 傳回指示方法是否已定義的值。 yii\base\Component
hasProperty() 傳回指示是否為此組件定義屬性的值。 yii\base\Component
init() 初始化物件。 yii\base\BaseObject
load() 從 MO 檔案載入訊息。 yii\i18n\GettextMoFile
off() 從此組件分離現有的事件處理程式。 yii\base\Component
on() 將事件處理程式附加到事件。 yii\base\Component
save() 將訊息儲存到 MO 檔案。 yii\i18n\GettextMoFile
trigger() 觸發事件。 yii\base\Component

受保護方法

隱藏繼承方法

方法 描述 定義於
readBytes() 讀取一個或多個位元組。 yii\i18n\GettextMoFile
readInteger() 讀取 4 位元組整數。 yii\i18n\GettextMoFile
readString() 讀取字串。 yii\i18n\GettextMoFile
writeBytes() 寫入位元組。 yii\i18n\GettextMoFile
writeInteger() 寫入 4 位元組整數。 yii\i18n\GettextMoFile
writeString() 寫入字串。 yii\i18n\GettextMoFile

屬性詳細資訊

隱藏繼承的屬性

$useBigEndian 公共屬性

讀取和寫入整數時是否使用 big-endian。

public boolean $useBigEndian false

方法詳細資訊

隱藏繼承方法

__call() 公共方法

定義於: yii\base\Component::__call()

呼叫未定義為類別方法的具名方法。

此方法將檢查是否有任何附加的行為具有具名方法,如果有,則會執行它。

請勿直接呼叫此方法,因為它是 PHP 魔術方法,當呼叫未知的方法時,會隱含地呼叫它。

public mixed __call ( $name, $params )
$name 字串

方法名稱

$params 陣列

方法參數

傳回 混合

方法傳回值

拋出 yii\base\UnknownMethodException

當呼叫未知方法時

                public function __call($name, $params)
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $object) {
        if ($object->hasMethod($name)) {
            return call_user_func_array([$object, $name], $params);
        }
    }
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__clone() 公共方法

定義於: yii\base\Component::__clone()

在透過複製現有物件建立物件後,會呼叫此方法。

它會移除所有行為,因為它們附加到舊物件。

public void __clone ( )

                public function __clone()
{
    $this->_events = [];
    $this->_eventWildcards = [];
    $this->_behaviors = null;
}

            
__construct() 公共方法

定義於: yii\base\BaseObject::__construct()

建構子。

預設實作會執行兩件事

  • 使用給定的組態 $config 初始化物件。
  • 呼叫 init()

如果子類別中覆寫了此方法,建議

  • 建構子的最後一個參數是組態陣列,如這裡的 $config
  • 在建構子的結尾呼叫父類別實作。
public void __construct ( $config = [] )
$config 陣列

將用於初始化物件屬性的名稱-值配對

                public function __construct($config = [])
{
    if (!empty($config)) {
        Yii::configure($this, $config);
    }
    $this->init();
}

            
__get() 公共方法

定義於: yii\base\Component::__get()

傳回組件屬性的值。

此方法將依以下順序檢查並採取相應動作

  • getter 定義的屬性:傳回 getter 結果
  • 行為的屬性:傳回行為屬性值

請勿直接呼叫此方法,因為它是 PHP 魔術方法,當執行 $value = $component->property; 時,會隱含地呼叫它。

另請參閱 __set()

public mixed __get ( $name )
$name 字串

屬性名稱

傳回 混合

屬性值或行為的屬性值

拋出 yii\base\UnknownPropertyException

如果未定義屬性

拋出 yii\base\InvalidCallException

如果屬性為唯寫。

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        // read property, e.g. getName()
        return $this->$getter();
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name;
        }
    }
    if (method_exists($this, 'set' . $name)) {
        throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}

            
__isset() 公共方法

定義於: yii\base\Component::__isset()

檢查屬性是否已設定,即已定義且非 null。

此方法將依以下順序檢查並採取相應動作

  • setter 定義的屬性:傳回屬性是否已設定
  • 行為的屬性:傳回屬性是否已設定
  • 針對不存在的屬性傳回 false

請勿直接呼叫此方法,因為它是 PHP 魔術方法,當執行 isset($component->property) 時,會隱含地呼叫它。

另請參閱 https://php.dev.org.tw/manual/en/function.isset.php

public boolean __isset ( $name )
$name 字串

屬性名稱或事件名稱

傳回 boolean

具名屬性是否已設定

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name !== null;
        }
    }
    return false;
}

            
__set() 公共方法

定義於: yii\base\Component::__set()

設定組件屬性的值。

此方法將依以下順序檢查並採取相應動作

  • setter 定義的屬性:設定屬性值
  • 格式為 "on xyz" 的事件:將處理程式附加到事件 "xyz"
  • 格式為 "as xyz" 的行為:附加名為 "xyz" 的行為
  • 行為的屬性:設定行為屬性值

請勿直接呼叫此方法,因為它是 PHP 魔術方法,當執行 $component->property = $value; 時,會隱含地呼叫它。

另請參閱 __get()

public void __set ( $name, $value )
$name 字串

屬性名稱或事件名稱

$value 混合

屬性值

拋出 yii\base\UnknownPropertyException

如果未定義屬性

拋出 yii\base\InvalidCallException

如果屬性為唯讀。

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        // set property
        $this->$setter($value);
        return;
    } elseif (strncmp($name, 'on ', 3) === 0) {
        // on event: attach event handler
        $this->on(trim(substr($name, 3)), $value);
        return;
    } elseif (strncmp($name, 'as ', 3) === 0) {
        // as behavior: attach behavior
        $name = trim(substr($name, 3));
        $this->attachBehavior($name, $value instanceof Behavior ? $value : Yii::createObject($value));
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = $value;
            return;
        }
    }
    if (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}

            
__unset() 公共方法

定義於: yii\base\Component::__unset()

將組件屬性設定為 null。

此方法將依以下順序檢查並採取相應動作

  • setter 定義的屬性:將屬性值設定為 null
  • 行為的屬性:將屬性值設定為 null

請勿直接呼叫此方法,因為它是 PHP 魔術方法,當執行 unset($component->property) 時,會隱含地呼叫它。

另請參閱 https://php.dev.org.tw/manual/en/function.unset.php

public void __unset ( $name )
$name 字串

屬性名稱

拋出 yii\base\InvalidCallException

如果屬性為唯讀。

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = null;
            return;
        }
    }
    throw new InvalidCallException('Unsetting an unknown or read-only property: ' . get_class($this) . '::' . $name);
}

            
attachBehavior() 公共方法

定義於: yii\base\Component::attachBehavior()

將行為附加到此組件。

此方法將根據給定的組態建立行為物件。之後,將透過呼叫 yii\base\Behavior::attach() 方法,將行為物件附加到此組件。

另請參閱 detachBehavior()

public yii\base\Behavior attachBehavior ( $name, $behavior )
$name 字串

行為的名稱。

$behavior 字串|陣列|yii\base\Behavior

行為組態。這可以是下列其中之一

傳回 yii\base\Behavior

行為物件

                public function attachBehavior($name, $behavior)
{
    $this->ensureBehaviors();
    return $this->attachBehaviorInternal($name, $behavior);
}

            
attachBehaviors() 公共方法

定義於: yii\base\Component::attachBehaviors()

將行為列表附加到組件。

每個行為都依其名稱編製索引,並且應為 yii\base\Behavior 物件、指定行為類別的字串或用於建立行為的組態陣列。

另請參閱 attachBehavior()

public void attachBehaviors ( $behaviors )
$behaviors 陣列

要附加到組件的行為列表

                public function attachBehaviors($behaviors)
{
    $this->ensureBehaviors();
    foreach ($behaviors as $name => $behavior) {
        $this->attachBehaviorInternal($name, $behavior);
    }
}

            
behaviors() 公共方法

定義於: yii\base\Component::behaviors()

傳回此組件應表現為的行為列表。

子類別可能會覆寫此方法,以指定它們想要表現為的行為。

此方法的傳回值應為行為物件或依行為名稱編製索引的組態陣列。行為組態可以是指定行為類別的字串,或是以下結構的陣列

'behaviorName' => [
    'class' => 'BehaviorClass',
    'property1' => 'value1',
    'property2' => 'value2',
]

請注意,行為類別必須從 yii\base\Behavior 擴充。行為可以使用名稱或匿名方式附加。當名稱用作陣列索引鍵時,使用此名稱,稍後可以使用 getBehavior() 擷取行為,或使用 detachBehavior() 分離行為。匿名行為無法擷取或分離。

在此方法中宣告的行為將自動(依需求)附加到組件。

public 陣列 behaviors ( )
傳回 陣列

行為組態。

                public function behaviors()
{
    return [];
}

            
canGetProperty() 公共方法

定義於: yii\base\Component::canGetProperty()

傳回指示屬性是否可讀取的值。

如果符合以下條件,則可以讀取屬性

  • 類別具有與指定名稱相關聯的 getter 方法(在這種情況下,屬性名稱不區分大小寫);
  • 類別具有具有指定名稱的成員變數(當 $checkVars 為 true 時);
  • 附加的行為具有給定名稱的可讀取屬性(當 $checkBehaviors 為 true 時)。

另請參閱 canSetProperty()

public boolean canGetProperty ( $name, $checkVars true, $checkBehaviors true )
$name 字串

屬性名稱

$checkVars boolean

是否將成員變數視為屬性

$checkBehaviors boolean

是否將行為的屬性視為此組件的屬性

傳回 boolean

屬性是否可讀取

                public function canGetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canGetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
canSetProperty() 公共方法

定義於: yii\base\Component::canSetProperty()

傳回指示屬性是否可設定的值。

如果符合以下條件,則可以寫入屬性

  • 類別具有與指定名稱相關聯的 setter 方法(在這種情況下,屬性名稱不區分大小寫);
  • 類別具有具有指定名稱的成員變數(當 $checkVars 為 true 時);
  • 附加的行為具有給定名稱的可寫入屬性(當 $checkBehaviors 為 true 時)。

另請參閱 canGetProperty()

public boolean canSetProperty ( $name, $checkVars true, $checkBehaviors true )
$name 字串

屬性名稱

$checkVars boolean

是否將成員變數視為屬性

$checkBehaviors boolean

是否將行為的屬性視為此組件的屬性

傳回 boolean

屬性是否可寫入

                public function canSetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canSetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
className() 公共靜態方法
自 2.0.14 版起已棄用。在 PHP >=5.5 上,請改用 ::class

定義於: yii\base\BaseObject::className()

傳回此類別的完整限定名稱。

public static 字串 className ( )
傳回 字串

此類別的完整限定名稱。

                public static function className()
{
    return get_called_class();
}

            
detachBehavior() 公共方法

定義於: yii\base\Component::detachBehavior()

從組件中分離行為。

將會調用行為的 yii\base\Behavior::detach() 方法。

public yii\base\Behavior|null detachBehavior ( $name )
$name 字串

行為的名稱。

傳回 yii\base\Behavior|null

分離的行為。如果行為不存在,則為 Null。

                public function detachBehavior($name)
{
    $this->ensureBehaviors();
    if (isset($this->_behaviors[$name])) {
        $behavior = $this->_behaviors[$name];
        unset($this->_behaviors[$name]);
        $behavior->detach();
        return $behavior;
    }
    return null;
}

            
detachBehaviors() 公共方法

定義於: yii\base\Component::detachBehaviors()

從組件中分離所有行為。

public void detachBehaviors ( )

                public function detachBehaviors()
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $name => $behavior) {
        $this->detachBehavior($name);
    }
}

            
ensureBehaviors() 公共方法

定義於: yii\base\Component::ensureBehaviors()

確保在 behaviors() 中宣告的行為已附加到此組件。

public void ensureBehaviors ( )

                public function ensureBehaviors()
{
    if ($this->_behaviors === null) {
        $this->_behaviors = [];
        foreach ($this->behaviors() as $name => $behavior) {
            $this->attachBehaviorInternal($name, $behavior);
        }
    }
}

            
getBehavior() 公共方法

定義於: yii\base\Component::getBehavior()

傳回具名行為物件。

public yii\base\Behavior|null getBehavior ( $name )
$name 字串

行為名稱

傳回 yii\base\Behavior|null

行為物件,如果行為不存在,則為 null

                public function getBehavior($name)
{
    $this->ensureBehaviors();
    return isset($this->_behaviors[$name]) ? $this->_behaviors[$name] : null;
}

            
getBehaviors() 公共方法

定義於: yii\base\Component::getBehaviors()

傳回附加到此組件的所有行為。

public yii\base\Behavior[] getBehaviors ( )
傳回 yii\base\Behavior[]

附加到此組件的行為列表

                public function getBehaviors()
{
    $this->ensureBehaviors();
    return $this->_behaviors;
}

            
hasEventHandlers() 公共方法

定義於: yii\base\Component::hasEventHandlers()

傳回指示是否有名稱事件附加任何處理程式的值。

public boolean hasEventHandlers ( $name )
$name 字串

事件名稱

傳回 boolean

事件是否附加任何處理程式。

                public function hasEventHandlers($name)
{
    $this->ensureBehaviors();
    if (!empty($this->_events[$name])) {
        return true;
    }
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (!empty($handlers) && StringHelper::matchWildcard($wildcard, $name)) {
            return true;
        }
    }
    return Event::hasHandlers($this, $name);
}

            
hasMethod() 公共方法

定義於: yii\base\Component::hasMethod()

傳回指示方法是否已定義的值。

如果符合以下條件,則定義方法

  • 類別具有具有指定名稱的方法
  • 附加的行為具有給定名稱的方法(當 $checkBehaviors 為 true 時)。
public boolean hasMethod ( $name, $checkBehaviors true )
$name 字串

屬性名稱

$checkBehaviors boolean

是否將行為的方法視為此組件的方法

傳回 boolean

方法是否已定義

                public function hasMethod($name, $checkBehaviors = true)
{
    if (method_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->hasMethod($name)) {
                return true;
            }
        }
    }
    return false;
}

            
hasProperty() 公共方法

定義於: yii\base\Component::hasProperty()

傳回指示是否為此組件定義屬性的值。

如果符合以下條件,則定義屬性

  • 類別具有與指定名稱相關聯的 getter 或 setter 方法(在這種情況下,屬性名稱不區分大小寫);
  • 類別具有具有指定名稱的成員變數(當 $checkVars 為 true 時);
  • 附加的行為具有給定名稱的屬性(當 $checkBehaviors 為 true 時)。

另請參閱

public boolean hasProperty ( $name, $checkVars true, $checkBehaviors true )
$name 字串

屬性名稱

$checkVars boolean

是否將成員變數視為屬性

$checkBehaviors boolean

是否將行為的屬性視為此組件的屬性

傳回 boolean

屬性是否已定義

                public function hasProperty($name, $checkVars = true, $checkBehaviors = true)
{
    return $this->canGetProperty($name, $checkVars, $checkBehaviors) || $this->canSetProperty($name, false, $checkBehaviors);
}

            
init() 公共方法

定義於: yii\base\BaseObject::init()

初始化物件。

在以給定的組態初始化物件後,會在建構子的結尾調用此方法。

public void init ( )

                public function init()
{
}

            
load() 公共方法

從 MO 檔案載入訊息。

public 陣列 load ( $filePath, $context )
$filePath 字串

檔案路徑

$context 字串

訊息上下文

傳回 陣列

訊息翻譯。陣列索引鍵是來源訊息,而陣列值是已翻譯的訊息:來源訊息 => 已翻譯的訊息。

拋出 yii\base\Exception

如果無法讀取 MO 檔案

                public function load($filePath, $context)
{
    if (false === ($fileHandle = @fopen($filePath, 'rb'))) {
        throw new Exception('Unable to read file "' . $filePath . '".');
    }
    if (false === @flock($fileHandle, LOCK_SH)) {
        throw new Exception('Unable to lock file "' . $filePath . '" for reading.');
    }
    // magic
    $array = unpack('c', $this->readBytes($fileHandle, 4));
    $magic = current($array);
    if ($magic == -34) {
        $this->useBigEndian = false;
    } elseif ($magic == -107) {
        $this->useBigEndian = true;
    } else {
        throw new Exception('Invalid MO file: ' . $filePath . ' (magic: ' . $magic . ').');
    }
    // revision
    $revision = $this->readInteger($fileHandle);
    if ($revision !== 0) {
        throw new Exception('Invalid MO file revision: ' . $revision . '.');
    }
    $count = $this->readInteger($fileHandle);
    $sourceOffset = $this->readInteger($fileHandle);
    $targetOffset = $this->readInteger($fileHandle);
    $sourceLengths = [];
    $sourceOffsets = [];
    fseek($fileHandle, $sourceOffset);
    for ($i = 0; $i < $count; ++$i) {
        $sourceLengths[] = $this->readInteger($fileHandle);
        $sourceOffsets[] = $this->readInteger($fileHandle);
    }
    $targetLengths = [];
    $targetOffsets = [];
    fseek($fileHandle, $targetOffset);
    for ($i = 0; $i < $count; ++$i) {
        $targetLengths[] = $this->readInteger($fileHandle);
        $targetOffsets[] = $this->readInteger($fileHandle);
    }
    $messages = [];
    for ($i = 0; $i < $count; ++$i) {
        $id = $this->readString($fileHandle, $sourceLengths[$i], $sourceOffsets[$i]);
        $separatorPosition = strpos((string)$id, chr(4));
        if ((!$context && $separatorPosition === false) || ($context && $separatorPosition !== false && strncmp($id, $context, $separatorPosition) === 0)) {
            if ($separatorPosition !== false) {
                $id = substr($id, $separatorPosition + 1);
            }
            $message = $this->readString($fileHandle, $targetLengths[$i], $targetOffsets[$i]);
            $messages[$id] = $message;
        }
    }
    @flock($fileHandle, LOCK_UN);
    @fclose($fileHandle);
    return $messages;
}

            
off() 公共方法

定義於: yii\base\Component::off()

從此組件分離現有的事件處理程式。

此方法與 on() 相反。

注意:如果傳遞了事件名稱的萬用字元模式,則只會移除使用此萬用字元註冊的處理程式,而使用符合此萬用字元的純名稱註冊的處理程式將保留。

另請參閱 on()

public boolean off ( $name, $handler null )
$name 字串

事件名稱

$handler callable|null

要移除的事件處理程式。如果為 null,則會移除附加到具名事件的所有處理程式。

傳回 boolean

如果找到並分離處理程式

                public function off($name, $handler = null)
{
    $this->ensureBehaviors();
    if (empty($this->_events[$name]) && empty($this->_eventWildcards[$name])) {
        return false;
    }
    if ($handler === null) {
        unset($this->_events[$name], $this->_eventWildcards[$name]);
        return true;
    }
    $removed = false;
    // plain event names
    if (isset($this->_events[$name])) {
        foreach ($this->_events[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_events[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_events[$name] = array_values($this->_events[$name]);
            return true;
        }
    }
    // wildcard event names
    if (isset($this->_eventWildcards[$name])) {
        foreach ($this->_eventWildcards[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_eventWildcards[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_eventWildcards[$name] = array_values($this->_eventWildcards[$name]);
            // remove empty wildcards to save future redundant regex checks:
            if (empty($this->_eventWildcards[$name])) {
                unset($this->_eventWildcards[$name]);
            }
        }
    }
    return $removed;
}

            
on() 公共方法

定義於: yii\base\Component::on()

將事件處理程式附加到事件。

事件處理程式必須是有效的 PHP 回呼。以下是一些範例

function ($event) { ... }         // anonymous function
[$object, 'handleClick']          // $object->handleClick()
['Page', 'handleClick']           // Page::handleClick()
'handleClick'                     // global function handleClick()

事件處理程式必須使用以下簽名定義,

function ($event)

其中 $eventyii\base\Event 物件,其中包含與事件相關聯的參數。

自 2.0.14 版起,您可以將事件名稱指定為萬用字元模式

$component->on('event.group.*', function ($event) {
    Yii::trace($event->name . ' is triggered.');
});

另請參閱 off()

public void on ( $name, $handler, $data null, $append true )
$name 字串

事件名稱

$handler 可呼叫

事件處理程式

$data 混合

要在觸發事件時傳遞給事件處理程式的資料。當調用事件處理程式時,可以透過 yii\base\Event::$data 存取此資料。

$append boolean

是否將新的事件處理程式附加到現有處理程式列表的末尾。如果為 false,則新的處理程式將插入到現有處理程式列表的開頭。

                public function on($name, $handler, $data = null, $append = true)
{
    $this->ensureBehaviors();
    if (strpos($name, '*') !== false) {
        if ($append || empty($this->_eventWildcards[$name])) {
            $this->_eventWildcards[$name][] = [$handler, $data];
        } else {
            array_unshift($this->_eventWildcards[$name], [$handler, $data]);
        }
        return;
    }
    if ($append || empty($this->_events[$name])) {
        $this->_events[$name][] = [$handler, $data];
    } else {
        array_unshift($this->_events[$name], [$handler, $data]);
    }
}

            
readBytes() 受保護方法

讀取一個或多個位元組。

protected string readBytes ( $fileHandle, $byteCount 1 )
$fileHandle resource

從哪裡讀取

$byteCount integer

要讀取的

傳回 字串

位元組

                protected function readBytes($fileHandle, $byteCount = 1)
{
    if ($byteCount > 0) {
        return fread($fileHandle, $byteCount);
    }
    return null;
}

            
readInteger() protected method

讀取 4 位元組整數。

protected integer readInteger ( $fileHandle )
$fileHandle resource

從哪裡讀取

傳回 integer

結果

                protected function readInteger($fileHandle)
{
    $array = unpack($this->useBigEndian ? 'N' : 'V', $this->readBytes($fileHandle, 4));
    return current($array);
}

            
readString() protected method

讀取字串。

protected string readString ( $fileHandle, $length, $offset null )
$fileHandle resource

檔案控制代碼

$length integer

字串的長度

$offset integer|null

字串在檔案中的偏移量。如果為 null,則從當前位置讀取。

傳回 字串

結果

                protected function readString($fileHandle, $length, $offset = null)
{
    if ($offset !== null) {
        fseek($fileHandle, $offset);
    }
    return $this->readBytes($fileHandle, $length);
}

            
save() public method

將訊息儲存到 MO 檔案。

public void save ( $filePath, $messages )
$filePath 字串

檔案路徑

$messages 陣列

訊息翻譯。陣列鍵是來源訊息,陣列值是翻譯後的訊息:來源訊息 => 翻譯後的訊息。請注意,如果訊息有上下文,訊息 ID 必須以上下文作為前綴,並以 chr(4) 作為分隔符號。

拋出 yii\base\Exception

如果無法儲存 MO 檔案

                public function save($filePath, $messages)
{
    if (false === ($fileHandle = @fopen($filePath, 'wb'))) {
        throw new Exception('Unable to write file "' . $filePath . '".');
    }
    if (false === @flock($fileHandle, LOCK_EX)) {
        throw new Exception('Unable to lock file "' . $filePath . '" for reading.');
    }
    // magic
    if ($this->useBigEndian) {
        $this->writeBytes($fileHandle, pack('c*', 0x95, 0x04, 0x12, 0xde)); // -107
    } else {
        $this->writeBytes($fileHandle, pack('c*', 0xde, 0x12, 0x04, 0x95)); // -34
    }
    // revision
    $this->writeInteger($fileHandle, 0);
    // message count
    $messageCount = count($messages);
    $this->writeInteger($fileHandle, $messageCount);
    // offset of source message table
    $offset = 28;
    $this->writeInteger($fileHandle, $offset);
    $offset += $messageCount * 8;
    $this->writeInteger($fileHandle, $offset);
    // hashtable size, omitted
    $this->writeInteger($fileHandle, 0);
    $offset += $messageCount * 8;
    $this->writeInteger($fileHandle, $offset);
    // length and offsets for source messages
    foreach (array_keys($messages) as $id) {
        $length = strlen($id);
        $this->writeInteger($fileHandle, $length);
        $this->writeInteger($fileHandle, $offset);
        $offset += $length + 1;
    }
    // length and offsets for target messages
    foreach ($messages as $message) {
        $length = strlen($message);
        $this->writeInteger($fileHandle, $length);
        $this->writeInteger($fileHandle, $offset);
        $offset += $length + 1;
    }
    // source messages
    foreach (array_keys($messages) as $id) {
        $this->writeString($fileHandle, $id);
    }
    // target messages
    foreach ($messages as $message) {
        $this->writeString($fileHandle, $message);
    }
    @flock($fileHandle, LOCK_UN);
    @fclose($fileHandle);
}

            
trigger() public method

定義於: yii\base\Component::trigger()

觸發事件。

此方法表示事件的發生。它會調用事件的所有附加處理程序,包括類別層級的處理程序。

public void trigger ( $name, yii\base\Event $event null )
$name 字串

事件名稱

$event yii\base\Event|null

事件實例。如果未設定,將會建立預設的 yii\base\Event 物件。

                public function trigger($name, Event $event = null)
{
    $this->ensureBehaviors();
    $eventHandlers = [];
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (StringHelper::matchWildcard($wildcard, $name)) {
            $eventHandlers[] = $handlers;
        }
    }
    if (!empty($this->_events[$name])) {
        $eventHandlers[] = $this->_events[$name];
    }
    if (!empty($eventHandlers)) {
        $eventHandlers = call_user_func_array('array_merge', $eventHandlers);
        if ($event === null) {
            $event = new Event();
        }
        if ($event->sender === null) {
            $event->sender = $this;
        }
        $event->handled = false;
        $event->name = $name;
        foreach ($eventHandlers as $handler) {
            $event->data = $handler[1];
            call_user_func($handler[0], $event);
            // stop further handling if the event is handled
            if ($event->handled) {
                return;
            }
        }
    }
    // invoke class-level attached handlers
    Event::trigger($this, $name, $event);
}

            
writeBytes() protected method

寫入位元組。

protected integer writeBytes ( $fileHandle, $bytes )
$fileHandle resource

寫入至

$bytes 字串

要寫入的內容

傳回 integer

寫入了多少位元組

                protected function writeBytes($fileHandle, $bytes)
{
    return fwrite($fileHandle, $bytes);
}

            
writeInteger() protected method

寫入 4 位元組整數。

protected integer writeInteger ( $fileHandle, $integer )
$fileHandle resource

寫入至

$integer integer

要寫入的內容

傳回 integer

寫入了多少位元組

                protected function writeInteger($fileHandle, $integer)
{
    return $this->writeBytes($fileHandle, pack($this->useBigEndian ? 'N' : 'V', (int) $integer));
}

            
writeString() protected method

寫入字串。

protected integer writeString ( $fileHandle, $string )
$fileHandle resource

寫入至

$string 字串

要寫入的內容

傳回 integer

寫入了多少位元組

                protected function writeString($fileHandle, $string)
{
    return $this->writeBytes($fileHandle, $string . "\0");
}