0 关注者

类 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 父标记。 yii\db\SqlToken
$sql string SQL 代码。 yii\db\SqlToken
$startOffset integer 原始 SQL 标记开始位置。 yii\db\SqlToken
$type integer 标记类型。 yii\db\SqlToken

公有方法

隐藏继承的方法

方法 描述 定义于
__call() 调用不是类方法的命名方法。 yii\base\BaseObject
__construct() 构造函数。 yii\base\BaseObject
__get() 返回对象属性的值。 yii\base\BaseObject
__isset() 检查属性是否已设置,即定义且不为 null。 yii\base\BaseObject
__set() 设置对象属性的值。 yii\base\BaseObject
__toString() 返回表示标记的 SQL 代码。 yii\db\SqlToken
__unset() 将对象属性设置为 null。 yii\base\BaseObject
canGetProperty() 返回一个值,指示属性是否可读。 yii\base\BaseObject
canSetProperty() 返回一个值,指示属性是否可写。 yii\base\BaseObject
className() 返回此类的完全限定名。 yii\base\BaseObject
getChildren() 返回子标记。 yii\db\SqlToken
getHasChildren() 返回标记是否表示一组标记且子标记数量不为零。 yii\db\SqlToken
getIsCollection() 返回标记是否表示一组标记。 yii\db\SqlToken
getSql() 返回表示标记的 SQL 代码。 yii\db\SqlToken
hasMethod() 返回一个值,指示方法是否已定义。 yii\base\BaseObject
hasProperty() 返回一个值,指示属性是否已定义。 yii\base\BaseObject
init() 初始化对象。 yii\base\BaseObject
matches() 返回此标记(包括其子标记)是否与指定的“模式”SQL 代码匹配。 yii\db\SqlToken
offsetExists() 返回指定偏移量处是否存在子标记。 yii\db\SqlToken
offsetGet() 返回指定偏移量处的子标记。 yii\db\SqlToken
offsetSet() 向标记添加子标记。 yii\db\SqlToken
offsetUnset() 移除指定偏移量处的子标记。 yii\db\SqlToken
setChildren() 设置子标记列表。 yii\db\SqlToken

常量

隐藏继承的常量

常量 描述 定义于
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

属性详情

隐藏继承的属性

$children 公有属性

子标记。

public yii\db\SqlToken[] $children null
$content 公有属性

标记内容。

public string|null $content null
$endOffset 公有属性

原始 SQL 标记结束位置。

public integer $endOffset null
$hasChildren 公有属性

标记是否有子标记。

public boolean $hasChildren null
$isCollection 公有属性

标记是否表示一组标记。

public boolean $isCollection null
$parent 公有属性

父标记。

public yii\db\SqlToken $parent null
$sql 公共属性

SQL 代码。

public string $sql null
$startOffset 公共属性

原始 SQL 标记开始位置。

public integer $startOffset null
$type 公共属性
public integer $type self::TYPE_TOKEN

方法详情

隐藏继承的方法

__call() 公共方法

定义于: yii\base\BaseObject::__call()

调用不是类方法的命名方法。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当调用未知方法时会隐式调用。

public mixed __call ( $name, $params )
$name string

方法名

$params array

方法参数

返回值 mixed

方法返回值

抛出 yii\base\UnknownMethodException

当调用未知方法时

                public function __call($name, $params)
{
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__construct() 公共方法

定义于: 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();
}

            
__get() 公共方法

定义于: yii\base\BaseObject::__get()

返回对象属性的值。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 $value = $object->property; 时会隐式调用。

另见 __set().

public mixed __get ( $name )
$name string

属性名

返回值 mixed

属性值

抛出 yii\base\UnknownPropertyException

如果未定义属性

抛出 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);
}

            
__isset() 公共方法

定义于: yii\base\BaseObject::__isset()

检查属性是否已设置,即定义且不为 null。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 isset($object->property) 时会隐式调用。

注意,如果属性未定义,则将返回 false。

另见 https://php.ac.cn/manual/en/function.isset.php.

public boolean __isset ( $name )
$name string

属性名或事件名

返回值 boolean

命名属性是否已设置(不为 null)。

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    return false;
}

            
__set() 公共方法

定义于: yii\base\BaseObject::__set()

设置对象属性的值。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 $object->property = $value; 时会隐式调用。

另见 __get().

public void __set ( $name, $value )
$name string

属性名或事件名

$value mixed

属性值

抛出 yii\base\UnknownPropertyException

如果未定义属性

抛出 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);
    }
}

            
__toString() 公共方法

返回表示标记的 SQL 代码。

public string __toString ( )
返回值 string

SQL 代码。

                public function __toString()
{
    return $this->getSql();
}

            
__unset() 公共方法

定义于: yii\base\BaseObject::__unset()

将对象属性设置为 null。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 unset($object->property) 时会隐式调用。

注意,如果属性未定义,此方法将不做任何事情。如果属性是只读的,它将抛出异常。

另见 https://php.ac.cn/manual/en/function.unset.php.

public void __unset ( $name )
$name string

属性名

抛出 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);
    }
}

            
canGetProperty() 公共方法

定义于: yii\base\BaseObject::canGetProperty()

返回一个值,指示属性是否可读。

属性可读,如果

  • 类具有与指定名称关联的 getter 方法(在这种情况下,属性名称不区分大小写);
  • 类具有与指定名称匹配的成员变量(当 $checkVars 为 true 时);

另见 canSetProperty().

public boolean canGetProperty ( $name, $checkVars true )
$name string

属性名

$checkVars boolean

是否将成员变量视为属性

返回值 boolean

属性是否可读

                public function canGetProperty($name, $checkVars = true)
{
    return method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name);
}

            
canSetProperty() 公共方法

定义于: yii\base\BaseObject::canSetProperty()

返回一个值,指示属性是否可写。

属性可写,如果

  • 如果该类具有与指定名称关联的 setter 方法(在本例中,属性名称不区分大小写);
  • 类具有与指定名称匹配的成员变量(当 $checkVars 为 true 时);

另请参见 canGetProperty().

public boolean canSetProperty ( $name, $checkVars true )
$name string

属性名

$checkVars boolean

是否将成员变量视为属性

返回值 boolean

属性是否可以写入

                public function canSetProperty($name, $checkVars = true)
{
    return method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name);
}

            
className() 公共静态方法
自 2.0.14 版起已弃用。在 PHP >= 5.5 上,请使用 ::class 代替。

定义于: yii\base\BaseObject::className()

返回此类的完全限定名。

public static string className ( )
返回值 string

此类的完全限定名称。

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

            
getChildren() 公共方法

返回子标记。

public yii\db\SqlToken[] getChildren ( )
返回值 yii\db\SqlToken[]

子标记。

                public function getChildren()
{
    return $this->_children;
}

            
getHasChildren() 公共方法

返回标记是否表示一组标记且子标记数量不为零。

public boolean getHasChildren ( )
返回值 boolean

标记是否有子标记。

                public function getHasChildren()
{
    return $this->getIsCollection() && !empty($this->_children);
}

            
getIsCollection() 公共方法

返回标记是否表示一组标记。

public boolean getIsCollection ( )
返回值 boolean

标记是否表示一组标记。

                public function getIsCollection()
{
    return in_array($this->type, [
        self::TYPE_CODE,
        self::TYPE_STATEMENT,
        self::TYPE_PARENTHESIS,
    ], true);
}

            
getSql() 公共方法

返回表示标记的 SQL 代码。

public string getSql ( )
返回值 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');
}

            
hasMethod() 公共方法

定义于: yii\base\BaseObject::hasMethod()

返回一个值,指示方法是否已定义。

默认实现是调用 php 函数 method_exists()。当您实现 php 魔术方法 __call() 时,您可以重写此方法。

public boolean hasMethod ( $name )
$name string

方法名

返回值 boolean

方法是否已定义

                public function hasMethod($name)
{
    return method_exists($this, $name);
}

            
hasProperty() 公共方法

定义于: yii\base\BaseObject::hasProperty()

返回一个值,指示属性是否已定义。

如果定义了属性,则

  • 该类具有与指定名称关联的 getter 或 setter 方法(在本例中,属性名称不区分大小写);
  • 类具有与指定名称匹配的成员变量(当 $checkVars 为 true 时);

另请参见

public boolean hasProperty ( $name, $checkVars true )
$name string

属性名

$checkVars boolean

是否将成员变量视为属性

返回值 boolean

属性是否已定义

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

            
init() 公共方法

定义于: yii\base\BaseObject::init()

初始化对象。

此方法在构造函数结束时被调用,在对象使用给定的配置初始化后。

public void init ( )

                public function init()
{
}

            
matches() 公共方法

返回此标记(包括其子标记)是否与指定的“模式”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,还支持 any 关键字,它将匹配任意数量的关键字、标识符、空格。

$offset integer

要开始查找的标记子项偏移量。

$firstMatchIndex integer|null

成功匹配开始的标记子项偏移量。

$lastMatchIndex integer|null

成功匹配结束的标记子项偏移量。

返回值 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);
}

            
offsetExists() 公共方法

返回指定偏移量处是否存在子标记。

此方法是 SPL ArrayAccess 接口所必需的。当您使用类似 isset($token[$offset]) 的内容时,它会被隐式调用。

public boolean offsetExists ( $offset )
$offset integer

子标记偏移量。

返回值 boolean

标记是否存在。

                #[\ReturnTypeWillChange]
public function offsetExists($offset)
{
    return isset($this->_children[$this->calculateOffset($offset)]);
}

            
offsetGet() 公共方法

返回指定偏移量处的子标记。

此方法是 SPL ArrayAccess 接口所必需的。当您使用类似 $child = $token[$offset]; 的内容时,它会被隐式调用。

public yii\db\SqlToken|null offsetGet ( $offset )
$offset integer

子标记偏移量。

返回值 yii\db\SqlToken|null

指定偏移量处的子标记,如果不存在标记,则为 null

                #[\ReturnTypeWillChange]
public function offsetGet($offset)
{
    $offset = $this->calculateOffset($offset);
    return isset($this->_children[$offset]) ? $this->_children[$offset] : null;
}

            
offsetSet() 公共方法

向标记添加子标记。

此方法是 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();
}

            
offsetUnset() 公共方法

移除指定偏移量处的子标记。

此方法是 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();
}

            
setChildren() 公共方法

设置子标记列表。

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();
}