PHP Classes

File: test/userhooks.php

Recommend this page to a friend!
  Classes of Leon Sorokin   dump_r   test/userhooks.php   Download  
File: test/userhooks.php
Role: Example script
Content type: text/plain
Description: Example script
Class: dump_r
Display values of variables
Author: By
Last change:
Date: 9 years ago
Size: 1,914 bytes
 

Contents

Class file image Download
<style>
    .dump_r li.marked > .lbl {
        background: yellow;
    }
</style>

<?php

require '../dump_r.php';

use
dump_r\Type;

$stuff = [
   
'imgs/img_1771.jpg',
   
'data/people.csv',
    [
       
'a' => [1,2,3.5],
       
'b' => [4,5,6],
       
'c' => [7,8,[11,12,13]],
       
'xxx' => true,
       
'yyy' => 'something',
    ],
    [
        [
'a' => 1, 'b' => 3],
        [
'a' => 2, 'b' => 4],
    ],
   
"\x04\x00\xa0\x00\x32\x42\x00\xa0\xff\xff\xff\xff",
];


// exif data
Type::hook('String', function($raw, Type $type, $path) {
   
// match path-esque strings (containing '/' or '\') trailed by an
    // EXIF-capable image extension, then verify this file actually exists
   
if (preg_match('#[\/]+.+\.(jpe?g|tiff?)$#', $raw) && is_file($raw)) {
       
$nodes = $exif = exif_read_data($raw, 0, true);
       
$len = $exif['COMPUTED']['Width'] . 'x' . $exif['COMPUTED']['Height'];

       
$type->types = ['image'];
       
$type->nodes = ['EXIF' => $nodes['EXIF']];
       
$type->length = $len;

        return
$type;
    }
});


// csv records
Type::hook('String', function($raw, Type $type, $path) {
    if (
preg_match('#[\/]+.+\.csv$#', $raw) && is_file($raw)) {

       
$type->types = ['csv'];
       
$type->nodes = csv2array($raw);
       
$type->length = count($type->nodes);

        return
$type;
    }
});


function
csv2array($file) {
   
$csv = [];
   
$rows = array_map('str_getcsv', file($file));
   
$header = array_shift($rows);
    foreach (
$rows as $row)
       
$csv[] = array_combine($header, $row);

    return
$csv;
}

// prevent arrays keyed under 'c' from dumping sub-nodes
Type::hook('Array0', function($raw, Type $type, $path) {
    if (
end($path) === 'c')
       
$type->depth = 1;

    return
$type;
});

// prevent anything keyd under 'xxx' from dumping
Type::hook('*', function($raw, Type $type, $path) {
    if (
end($path) === 'xxx')
        return
false;
});

// tag specific keys with addl rend classes
Type::hook('*', function($raw, Type $type, $path) {
    if (
end($path) === 'yyy') {
       
$type->classes[] = 'marked';
    }

    return
$type;
});

dump_r($stuff);