src/Debug/MethodTable.php
public static function keyValues($row, $keys, &$objInfo)
    {
        $objInfo = array(
            'row' => false,
            'cols' => array(),
        );
        $rowIsAbstraction = Abstracter::isAbstraction($row);
        if ($rowIsAbstraction) {
            if ($row['type'] == 'object') {
                $objInfo['row'] = array(
                    'className' => $row['className'],
                    'phpDoc' => $row['phpDoc'],
                );
                $row = self::objectValues($row);
                if (!\is_array($row)) {
                    // ie stringified value
                    $objInfo['row'] = false;
                    $row = array(self::SCALAR => $row);
                } elseif (Abstracter::isAbstraction($row)) {
                    // still an abstraction (ie closure)
                    $objInfo['row'] = false;
                    $row = array(self::SCALAR => $row);
                }
            } else {
                // resource & callable
                $row = array(self::SCALAR => $row);
            }
        }
        if (!\is_array($row)) {
            $row = array(self::SCALAR =>  $row);
        }
        $values = array();
        foreach ($keys as $key) {
            if (\array_key_exists($key, $row)) {
                $value = $row[$key];
                if ($value !== null) {
                    // by setting to false :
                    //    indicate that the column is not populated by objs of the same type
                    //    if stringified abstraction, we'll set cols[key] below
                    $objInfo['cols'][$key] = false;
                }
                if (Abstracter::isAbstraction($value)) {
                    // just return the stringified / __toString value in a table
                    if (isset($value['stringified'])) {
                        $objInfo['cols'][$key] = $value['className'];
                        $value = $value['stringified'];
                    } elseif (isset($value['__toString']['returnValue'])) {
                        $objInfo['cols'][$key] = $value['className'];
                        $value = $value['__toString']['returnValue'];
                    }
                }
            } else {
                $value = Abstracter::UNDEFINED;
            }
            $values[$key] = $value;
        }
        return $values;
    }
public static function keyValues($row, $keys, &$objInfo)
    {
        $objInfo = array(
            'row' => false,
            'cols' => array(),
        );
        $rowIsAbstraction = Abstracter::isAbstraction($row);
        if ($rowIsAbstraction) {
            if ($row['type'] == 'object') {
                $objInfo['row'] = array(
                    'className' => $row['className'],
                    'phpDoc' => $row['phpDoc'],
                );
                $row = self::objectValues($row);
                if (!\is_array($row)) {
                    // ie stringified value
                    $objInfo['row'] = false;
                    $row = array(self::SCALAR => $row);
                } elseif (Abstracter::isAbstraction($row)) {
                    // still an abstraction (ie closure)
                    $objInfo['row'] = false;
                    $row = array(self::SCALAR => $row);
                }
            } else {
                // resource & callable
                $row = array(self::SCALAR => $row);
            }
        }
        if (!\is_array($row)) {
            $row = array(self::SCALAR =>  $row);
        }
        $values = array();
        foreach ($keys as $key) {
            if (\array_key_exists($key, $row)) {
                $value = $row[$key];
                if ($value !== null) {
                    // by setting to false :
                    //    indicate that the column is not populated by objs of the same type
                    //    if stringified abstraction, we'll set cols[key] below
                    $objInfo['cols'][$key] = false;
                }
                if (Abstracter::isAbstraction($value)) {
                    // just return the stringified / __toString value in a table
                    if (isset($value['stringified'])) {
                        $objInfo['cols'][$key] = $value['className'];
                        $value = $value['stringified'];
                    } elseif (isset($value['__toString']['returnValue'])) {
                        $objInfo['cols'][$key] = $value['className'];
                        $value = $value['__toString']['returnValue'];
                    }
                }
            } else {
                $value = Abstracter::UNDEFINED;
            }
            $values[$key] = $value;
        }
        return $values;
    }
public static function keyValues ( $ row , $ keys , & $ objInfo ) { $ objInfo = array ( 'row' => false , 'cols' => array ( ) , ) ; $ rowIsAbstraction = Abstracter :: isAbstraction ( $ row ) ; if ( $ rowIsAbstraction ) { if ( $ row [ 'type' ] == 'object' ) { $ objInfo [ 'row' ] = array ( 'className' => $ row [ 'className' ] , 'phpDoc' => $ row [ 'phpDoc' ] , ) ; $ row = self :: objectValues ( $ row ) ; if ( ! \ is_array ( $ row ) ) { // ie stringified value $ objInfo [ 'row' ] = false ; $ row = array ( self :: SCALAR => $ row ) ; } elseif ( Abstracter :: isAbstraction ( $ row ) ) { // still an abstraction (ie closure) $ objInfo [ 'row' ] = false ; $ row = array ( self :: SCALAR => $ row ) ; } } else { // resource & callable $ row = array ( self :: SCALAR => $ row ) ; } } if ( ! \ is_array ( $ row ) ) { $ row = array ( self :: SCALAR => $ row ) ; } $ values = array ( ) ; foreach ( $ keys as $ key ) { if ( \ array_key_exists ( $ key , $ row ) ) { $ value = $ row [ $ key ] ; if ( $ value !== null ) { // by setting to false : //    indicate that the column is not populated by objs of the same type //    if stringified abstraction, we'll set cols[key] below $ objInfo [ 'cols' ] [ $ key ] = false ; } if ( Abstracter :: isAbstraction ( $ value ) ) { // just return the stringified / __toString value in a table if ( isset ( $ value [ 'stringified' ] ) ) { $ objInfo [ 'cols' ] [ $ key ] = $ value [ 'className' ] ; $ value = $ value [ 'stringified' ] ; } elseif ( isset ( $ value [ '__toString' ] [ 'returnValue' ] ) ) { $ objInfo [ 'cols' ] [ $ key ] = $ value [ 'className' ] ; $ value = $ value [ '__toString' ] [ 'returnValue' ] ; } } } else { $ value = Abstracter :: UNDEFINED ; } $ values [ $ key ] = $ value ; } return $ values ; }
Get values for passed keys

Used by table method

@param array $row     should be array or abstraction
@param array $keys    column keys
@param array $objInfo Will be populated with className and phpDoc
if row is an objects, $objInfo['row'] will be populated
if a value is an object being displayed as a string,
$objInfo['cols'][key] will be populated

@return array
Get values for passed keys