ScalableBehavior.php
public function virtualAttributesNames()
    {
        if (!empty($this->_virtualAttributes))
            return $this->_virtualAttributes;

        if (!is_array($this->virtualAttributes) || empty($this->virtualAttributes))
            return null;

        $attributes = [];
        foreach ($this->virtualAttributes as $a) {
            if (!in_array($a, $this->objAttributesNames()) && !in_array($a, $attributes)) {
                $attributes[] = $a;
            }
        }

        return !empty($attributes) ? $this->_virtualAttributes = $attributes : null;
    }
public function virtualAttributesNames()
    {
        if (!empty($this->_virtualAttributes))
            return $this->_virtualAttributes;

        if (!is_array($this->virtualAttributes) || empty($this->virtualAttributes))
            return null;

        $attributes = [];
        foreach ($this->virtualAttributes as $a) {
            if (!in_array($a, $this->objAttributesNames()) && !in_array($a, $attributes)) {
                $attributes[] = $a;
            }
        }

        return !empty($attributes) ? $this->_virtualAttributes = $attributes : null;
    }
public function virtualAttributesNames ( ) { if ( ! empty ( $ this -> _virtualAttributes ) ) return $ this -> _virtualAttributes ; if ( ! is_array ( $ this -> virtualAttributes ) || empty ( $ this -> virtualAttributes ) ) return null ; $ attributes = [ ] ; foreach ( $ this -> virtualAttributes as $ a ) { if ( ! in_array ( $ a , $ this -> objAttributesNames ( ) ) && ! in_array ( $ a , $ attributes ) ) { $ attributes [ ] = $ a ; } } return ! empty ( $ attributes ) ? $ this -> _virtualAttributes = $ attributes : null ; }
Verifies the configured virtual attributes
@return mixed
Verifies the configured virtual attributes