類別 yii\db\SqlToken
繼承 | yii\db\SqlToken » yii\base\BaseObject |
---|---|
實作 | ArrayAccess, yii\base\Configurable |
自版本起可用 | 2.0.13 |
原始碼 | https://github.com/yiisoft/yii2/blob/master/framework/db/SqlToken.php |
SqlToken 代表由 yii\db\SqlTokenizer 或其子類別產生的 SQL 語法單元。
公開屬性
屬性 | 類型 | 描述 | 定義於 |
---|---|---|---|
$children | yii\db\SqlToken[] | 子語法單元。 | yii\db\SqlToken |
$content | string|null | 語法單元內容。 | yii\db\SqlToken |
$endOffset | integer | 原始 SQL 語法單元結束位置。 | yii\db\SqlToken |
$hasChildren | boolean | 語法單元是否包含子語法單元。 | yii\db\SqlToken |
$isCollection | boolean | 語法單元是否代表語法單元集合。 | yii\db\SqlToken |
$parent | yii\db\SqlToken | Parent token. | yii\db\SqlToken |
$sql | string | SQL 程式碼。 | yii\db\SqlToken |
$startOffset | integer | Original SQL token start position. | yii\db\SqlToken |
$type | integer | 語法單元類型。 | yii\db\SqlToken |
公開方法
Constants
Constant | Value | 描述 | 定義於 |
---|---|---|---|
TYPE_CODE | 0 | yii\db\SqlToken | |
TYPE_IDENTIFIER | 6 | yii\db\SqlToken | |
TYPE_KEYWORD | 4 | yii\db\SqlToken | |
TYPE_OPERATOR | 5 | yii\db\SqlToken | |
TYPE_PARENTHESIS | 3 | yii\db\SqlToken | |
TYPE_STATEMENT | 1 | yii\db\SqlToken | |
TYPE_STRING_LITERAL | 7 | yii\db\SqlToken | |
TYPE_TOKEN | 2 | yii\db\SqlToken |
Property Details
權杖類型。必須是下列常數之一
Method Details
Defined in: yii\base\BaseObject::__call()
呼叫未定義為類別方法的指定方法。
請勿直接呼叫此方法,因為它是 PHP 的魔術方法,當呼叫未知方法時會隱含地呼叫它。
public mixed __call ( $name, $params ) | ||
$name | string |
方法名稱 |
$params | array |
方法參數 |
return | mixed |
方法傳回值 |
---|---|---|
throws | yii\base\UnknownMethodException |
當呼叫未知方法時 |
public function __call($name, $params)
{
throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}
Defined in: yii\base\BaseObject::__construct()
建構子。
預設實作會執行兩件事
- 使用給定的組態
$config
初始化物件。 - 呼叫 init()。
如果在子類別中覆寫此方法,建議
- 建構子的最後一個參數是一個組態陣列,例如此處的
$config
。 - 在建構子的結尾呼叫父類別的實作。
public void __construct ( $config = [] ) | ||
$config | array |
將用於初始化物件屬性的名稱-值配對 |
public function __construct($config = [])
{
if (!empty($config)) {
Yii::configure($this, $config);
}
$this->init();
}
Defined in: yii\base\BaseObject::__get()
傳回物件屬性的值。
請勿直接呼叫此方法,因為它是 PHP 的魔術方法,當執行 $value = $object->property;
時會隱含地呼叫它。
另請參閱 __set()。
public mixed __get ( $name ) | ||
$name | string |
屬性名稱 |
return | mixed |
屬性值 |
---|---|---|
throws | yii\base\UnknownPropertyException |
如果未定義屬性 |
throws | yii\base\InvalidCallException |
如果屬性為唯寫 |
public function __get($name)
{
$getter = 'get' . $name;
if (method_exists($this, $getter)) {
return $this->$getter();
} elseif (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);
}
Defined in: yii\base\BaseObject::__isset()
檢查屬性是否已設定,亦即已定義且非 null。
請勿直接呼叫此方法,因為它是 PHP 的魔術方法,當執行 isset($object->property)
時會隱含地呼叫它。
請注意,如果未定義屬性,將會傳回 false。
public boolean __isset ( $name ) | ||
$name | string |
屬性名稱或事件名稱 |
return | boolean |
指示具名屬性是否已設定(非 null)。 |
---|
public function __isset($name)
{
$getter = 'get' . $name;
if (method_exists($this, $getter)) {
return $this->$getter() !== null;
}
return false;
}
Defined in: yii\base\BaseObject::__set()
設定物件屬性的值。
請勿直接呼叫此方法,因為它是 PHP 的魔術方法,當執行 $object->property = $value;
時會隱含地呼叫它。
另請參閱 __get()。
public void __set ( $name, $value ) | ||
$name | string |
屬性名稱或事件名稱 |
$value | mixed |
屬性值 |
throws | yii\base\UnknownPropertyException |
如果未定義屬性 |
---|---|---|
throws | yii\base\InvalidCallException |
如果屬性為唯讀 |
public function __set($name, $value)
{
$setter = 'set' . $name;
if (method_exists($this, $setter)) {
$this->$setter($value);
} elseif (method_exists($this, 'get' . $name)) {
throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
} else {
throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}
}
傳回代表語法單元的 SQL 程式碼。
public string __toString ( ) | ||
return | string |
SQL 程式碼。 |
---|
public function __toString()
{
return $this->getSql();
}
Defined in: yii\base\BaseObject::__unset()
將物件屬性設定為 null。
請勿直接呼叫此方法,因為它是 PHP 的魔術方法,當執行 unset($object->property)
時會隱含地呼叫它。
請注意,如果未定義屬性,此方法將不會執行任何操作。如果屬性為唯讀,則會擲回例外。
public void __unset ( $name ) | ||
$name | string |
屬性名稱 |
throws | yii\base\InvalidCallException |
如果屬性為唯讀。 |
---|
public function __unset($name)
{
$setter = 'set' . $name;
if (method_exists($this, $setter)) {
$this->$setter(null);
} elseif (method_exists($this, 'get' . $name)) {
throw new InvalidCallException('Unsetting read-only property: ' . get_class($this) . '::' . $name);
}
}
Defined in: yii\base\BaseObject::canGetProperty()
傳回值,指示屬性是否可讀取。
如果屬性可讀取,則
- 類別具有與指定名稱相關聯的 getter 方法(在此情況下,屬性名稱不區分大小寫);
- 類別具有具有指定名稱的成員變數(當
$checkVars
為 true 時);
另請參閱 canSetProperty()。
public boolean canGetProperty ( $name, $checkVars = true ) | ||
$name | string |
屬性名稱 |
$checkVars | boolean |
是否將成員變數視為屬性 |
return | boolean |
指示屬性是否可讀取 |
---|
public function canGetProperty($name, $checkVars = true)
{
return method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name);
}
Defined in: yii\base\BaseObject::canSetProperty()
傳回值,指示屬性是否可設定。
如果屬性可寫入,則
- 類別具有與指定名稱相關聯的 setter 方法(在此情況下,屬性名稱不區分大小寫);
- 類別具有具有指定名稱的成員變數(當
$checkVars
為 true 時);
另請參閱 canGetProperty()。
public boolean canSetProperty ( $name, $checkVars = true ) | ||
$name | string |
屬性名稱 |
$checkVars | boolean |
是否將成員變數視為屬性 |
return | boolean |
指示屬性是否可寫入 |
---|
public function canSetProperty($name, $checkVars = true)
{
return method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name);
}
::class
。
Defined in: yii\base\BaseObject::className()
傳回此類別的完整限定名稱。
public static string className ( ) | ||
return | string |
此類別的完整限定名稱。 |
---|
public static function className()
{
return get_called_class();
}
傳回子語法單元。
public yii\db\SqlToken[] getChildren ( ) | ||
return | yii\db\SqlToken[] |
子語法單元。 |
---|
public function getChildren()
{
return $this->_children;
}
傳回此權杖是否代表權杖集合,且是否包含非零數量的子權杖。
public boolean getHasChildren ( ) | ||
return | boolean |
語法單元是否包含子語法單元。 |
---|
public function getHasChildren()
{
return $this->getIsCollection() && !empty($this->_children);
}
傳回此權杖是否代表權杖集合。
public boolean getIsCollection ( ) | ||
return | boolean |
語法單元是否代表語法單元集合。 |
---|
public function getIsCollection()
{
return in_array($this->type, [
self::TYPE_CODE,
self::TYPE_STATEMENT,
self::TYPE_PARENTHESIS,
], true);
}
傳回代表語法單元的 SQL 程式碼。
public string getSql ( ) | ||
return | string |
SQL 程式碼。 |
---|
public function getSql()
{
$code = $this;
while ($code->parent !== null) {
$code = $code->parent;
}
return mb_substr($code->content, $this->startOffset, $this->endOffset - $this->startOffset, 'UTF-8');
}
Defined in: yii\base\BaseObject::hasMethod()
傳回一個值,指出是否已定義方法。
預設實作是對 php 函數 method_exists()
的呼叫。當您實作 php 魔術方法 __call()
時,可以覆寫此方法。
public boolean hasMethod ( $name ) | ||
$name | string |
方法名稱 |
return | boolean |
指示是否已定義方法 |
---|
public function hasMethod($name)
{
return method_exists($this, $name);
}
Defined in: yii\base\BaseObject::hasProperty()
傳回一個值,指出是否已定義屬性。
如果屬性已定義,則
- 類別具有與指定名稱相關聯的 getter 或 setter 方法(在此情況下,屬性名稱不區分大小寫);
- 類別具有具有指定名稱的成員變數(當
$checkVars
為 true 時);
另請參閱
public boolean hasProperty ( $name, $checkVars = true ) | ||
$name | string |
屬性名稱 |
$checkVars | boolean |
是否將成員變數視為屬性 |
return | boolean |
指示是否已定義屬性 |
---|
public function hasProperty($name, $checkVars = true)
{
return $this->canGetProperty($name, $checkVars) || $this->canSetProperty($name, false);
}
public void init ( ) |
public function init()
{
}
傳回此權杖(包含其子權杖)是否符合指定的「pattern」SQL 程式碼。
用法範例
$patternToken = (new \yii\db\sqlite\SqlTokenizer('SELECT any FROM any'))->tokenize();
if ($sqlToken->matches($patternToken, 0, $firstMatchIndex, $lastMatchIndex)) {
// ...
}
public boolean matches ( yii\db\SqlToken $patternToken, $offset = 0, &$firstMatchIndex = null, &$lastMatchIndex = null ) | ||
$patternToken | yii\db\SqlToken |
要比對的權杖化 SQL 程式碼。除了標準 SQL 之外,還支援 |
$offset | integer |
開始查找的權杖子項偏移量。 |
$firstMatchIndex | integer|null |
成功比對開始的權杖子項偏移量。 |
$lastMatchIndex | integer|null |
成功比對結束的權杖子項偏移量。 |
return | boolean |
指示此權杖是否符合模式 SQL 程式碼。 |
---|
public function matches(SqlToken $patternToken, $offset = 0, &$firstMatchIndex = null, &$lastMatchIndex = null)
{
if (!$patternToken->getHasChildren()) {
return false;
}
$patternToken = $patternToken[0];
return $this->tokensMatch($patternToken, $this, $offset, $firstMatchIndex, $lastMatchIndex);
}
傳回在指定偏移量處是否有子權杖。
此方法是 SPL ArrayAccess 介面所要求的。當您使用類似 isset($token[$offset])
的語法時,會隱含地呼叫它。
public boolean offsetExists ( $offset ) | ||
$offset | integer |
子權杖偏移量。 |
return | boolean |
指示權杖是否存在。 |
---|
#[\ReturnTypeWillChange]
public function offsetExists($offset)
{
return isset($this->_children[$this->calculateOffset($offset)]);
}
傳回在指定偏移量處的子權杖。
此方法是 SPL ArrayAccess 介面所要求的。當您使用類似 $child = $token[$offset];
的語法時,會隱含地呼叫它。
public yii\db\SqlToken|null offsetGet ( $offset ) | ||
$offset | integer |
子權杖偏移量。 |
return | yii\db\SqlToken|null |
指定偏移量處的子權杖,如果沒有權杖則為 |
---|
#[\ReturnTypeWillChange]
public function offsetGet($offset)
{
$offset = $this->calculateOffset($offset);
return isset($this->_children[$offset]) ? $this->_children[$offset] : null;
}
將子權杖新增至此權杖。
此方法是 SPL ArrayAccess 介面所要求的。當您使用類似 $token[$offset] = $child;
的語法時,會隱含地呼叫它。
public void offsetSet ( $offset, $token ) | ||
$offset | integer|null |
子權杖偏移量。 |
$token | yii\db\SqlToken |
要新增的權杖。 |
#[\ReturnTypeWillChange]
public function offsetSet($offset, $token)
{
$token->parent = $this;
if ($offset === null) {
$this->_children[] = $token;
} else {
$this->_children[$this->calculateOffset($offset)] = $token;
}
$this->updateCollectionOffsets();
}
移除在指定偏移量處的子權杖。
此方法是 SPL ArrayAccess 介面所要求的。當您使用類似 unset($token[$offset])
的語法時,會隱含地呼叫它。
public void offsetUnset ( $offset ) | ||
$offset | integer |
子權杖偏移量。 |
#[\ReturnTypeWillChange]
public function offsetUnset($offset)
{
$offset = $this->calculateOffset($offset);
if (isset($this->_children[$offset])) {
array_splice($this->_children, $offset, 1);
}
$this->updateCollectionOffsets();
}
設定子權杖的列表。
public void setChildren ( $children ) | ||
$children | yii\db\SqlToken[] |
子語法單元。 |
public function setChildren($children)
{
$this->_children = [];
foreach ($children as $child) {
$child->parent = $this;
$this->_children[] = $child;
}
$this->updateCollectionOffsets();
}
註冊 或 登入 以發表評論。