Baukereg
%Europe/Berlin %504 %2012, 12:06
De volgende class heb ik geschreven voor een eigen framework waar ik aan werk. Het idee is dat je met deze class een PHP bestand kan genereren of bijwerken met daarin meerdere arrays met data.
Voorbeeld:
$testArray = array("Mijn string", 2012, true);
$testAsoc = array("name"=>'Joep Meloen', "birthYear"=>1984, "school"=>array("HAVO", "HBO", "Master"));
$output = new PHPExport('includes/test.php');
$output->addArray("testArray", $testArray);
$output->addArray("testAsoc", $testAsoc);
$output->save();Zoals je ziet maak ik eerst twee arrays aan. De eerste is een numerieke array. De tweede is een associative array waarvan de derde waarde een numerieke array is. In principe kun je zo complex mogelijke (multi dimensional) arrays maken, zolang je het beperkt tot numbers, strings, booleans en arrays.
Vervolgens maak je een PHPExport aan met een verwijzing naar een bestand. In de stappen daarna worden de twee test arrays geregistreerd, waarbij de eerste parameter een string is van de variable name van de tweede parameter.
Als laatste stap wordt het bestand opgeslagen. Als het bestand nog niet bestaat, wordt deze aangemaakt (Let op! Directory moet wel schrijfbaar zijn). En anders wordt het bestand overschreven (Let op! Bestand moet wel schrijfbaar zijn).
Het bestand 'includes/test.php' ziet er nu als volgt uit:
<?php
// TESTARRAY
$testArray = array('Mijn string', 2012, true);
// TESTASOC
$testAsoc = array("name"=>'Joep Meloen', "birthYear"=>1984, "school"=>array('HAVO', 'HBO', 'Master'));
?>Dit bestand kun je vervolgens later inladen met een include of include_once, en uiteraard bijwerken en weer wegschrijven.
include('includes/test.php');
$testAsoc['birthPlace'] = 'New York City';
$output = new PHPExport('includes/test.php');
$output->addArray("testArray", $testArray);
$output->addArray("testAsoc", $testAsoc);
$output->save();Op deze manier kun je eenvoudig data opslaan en beheren, zonder dat je gebruik maakt van een database of Json/XML. Een praktische toepassing in mijn CMS is dat een bepaaldee table uit een MySQL database in de beheeromgeving aanpasbaar is en middels een 'render' knop als php bestand wordt weggeschreven. De front end maakt vervolgens gebruik van deze array. Voordelen: het bespaart een database query (= snelheidswinst) en er is een duidelijke scheiding tussen data aan de achterkant en data aan de voorkant.
Source:
<?php
class PHPExport
{
// PROPERTIES ************************************************** *****************************
private $file;
private $output;
private $boolToVal = array("false", "true");
// CONSTRUCTOR ************************************************** ****************************
public function __construct($file)
{
$this->file = $file;
}
/************************************************** **************************************************
* SAVE *
************************************************** **************************************************/
public function save()
{
if (!file_exists($this->file))
{
$handle = fopen($this->file, 'w') or die("Can't create file");
fclose($handle);
}
file_put_contents($this->file, '<?php' . "\r\r" . $this->output . '?>');
}
/************************************************** **************************************************
* ADD DATA *
************************************************** **************************************************/
public function addArray($name, $input)
{
$this->output .= '// ' . strtoupper($name) . "\r";
$this->output .= '$' . $name . ' = ' . $this->progressArray($name, $input, true) . ';' . "\r\r";;
}
private function progressArray($name, $input, $newline = false)
{
$output .= 'array(';
if ($this->is_assoc($input))
{
$i = 0;
foreach ($input as $key => $value)
{
if ($i > 0) $output .= ', ';
$output .= '"' . $key . '"=>';
if (is_numeric($input[$key])) $output .= $input[$key];
else if (is_string($input[$key])) $output .= '\'' . $input[$key] . '\'';
else if (is_bool($input[$key])) $output .= $this->boolToVal[(int)$input[$key]];
else if (is_array($input[$key])) $output .= $this->progressArray($name, $input[$key]);
$i ++;
}
}
else
{
for ($i = 0; $i < count($input); $i ++)
{
if ($i > 0) $output .= ', ';
if (is_numeric($input[$i])) $output .= $input[$i];
else if (is_string($input[$i])) $output .= '\'' . $input[$i] . '\'';
else if (is_bool($input[$i])) $output .= $this->boolToVal[(int)$input[$i]];
else if (is_array($input[$i])) $output .= $this->progressArray($name, $input[$i]);
}
}
$output .= ')';
return $output;
}
private function is_assoc($array)
{
return (bool)count(array_filter(array_keys($array), 'is_string'));
}
}
?>
Feedback is altijd welkom!
Voorbeeld:
$testArray = array("Mijn string", 2012, true);
$testAsoc = array("name"=>'Joep Meloen', "birthYear"=>1984, "school"=>array("HAVO", "HBO", "Master"));
$output = new PHPExport('includes/test.php');
$output->addArray("testArray", $testArray);
$output->addArray("testAsoc", $testAsoc);
$output->save();Zoals je ziet maak ik eerst twee arrays aan. De eerste is een numerieke array. De tweede is een associative array waarvan de derde waarde een numerieke array is. In principe kun je zo complex mogelijke (multi dimensional) arrays maken, zolang je het beperkt tot numbers, strings, booleans en arrays.
Vervolgens maak je een PHPExport aan met een verwijzing naar een bestand. In de stappen daarna worden de twee test arrays geregistreerd, waarbij de eerste parameter een string is van de variable name van de tweede parameter.
Als laatste stap wordt het bestand opgeslagen. Als het bestand nog niet bestaat, wordt deze aangemaakt (Let op! Directory moet wel schrijfbaar zijn). En anders wordt het bestand overschreven (Let op! Bestand moet wel schrijfbaar zijn).
Het bestand 'includes/test.php' ziet er nu als volgt uit:
<?php
// TESTARRAY
$testArray = array('Mijn string', 2012, true);
// TESTASOC
$testAsoc = array("name"=>'Joep Meloen', "birthYear"=>1984, "school"=>array('HAVO', 'HBO', 'Master'));
?>Dit bestand kun je vervolgens later inladen met een include of include_once, en uiteraard bijwerken en weer wegschrijven.
include('includes/test.php');
$testAsoc['birthPlace'] = 'New York City';
$output = new PHPExport('includes/test.php');
$output->addArray("testArray", $testArray);
$output->addArray("testAsoc", $testAsoc);
$output->save();Op deze manier kun je eenvoudig data opslaan en beheren, zonder dat je gebruik maakt van een database of Json/XML. Een praktische toepassing in mijn CMS is dat een bepaaldee table uit een MySQL database in de beheeromgeving aanpasbaar is en middels een 'render' knop als php bestand wordt weggeschreven. De front end maakt vervolgens gebruik van deze array. Voordelen: het bespaart een database query (= snelheidswinst) en er is een duidelijke scheiding tussen data aan de achterkant en data aan de voorkant.
Source:
<?php
class PHPExport
{
// PROPERTIES ************************************************** *****************************
private $file;
private $output;
private $boolToVal = array("false", "true");
// CONSTRUCTOR ************************************************** ****************************
public function __construct($file)
{
$this->file = $file;
}
/************************************************** **************************************************
* SAVE *
************************************************** **************************************************/
public function save()
{
if (!file_exists($this->file))
{
$handle = fopen($this->file, 'w') or die("Can't create file");
fclose($handle);
}
file_put_contents($this->file, '<?php' . "\r\r" . $this->output . '?>');
}
/************************************************** **************************************************
* ADD DATA *
************************************************** **************************************************/
public function addArray($name, $input)
{
$this->output .= '// ' . strtoupper($name) . "\r";
$this->output .= '$' . $name . ' = ' . $this->progressArray($name, $input, true) . ';' . "\r\r";;
}
private function progressArray($name, $input, $newline = false)
{
$output .= 'array(';
if ($this->is_assoc($input))
{
$i = 0;
foreach ($input as $key => $value)
{
if ($i > 0) $output .= ', ';
$output .= '"' . $key . '"=>';
if (is_numeric($input[$key])) $output .= $input[$key];
else if (is_string($input[$key])) $output .= '\'' . $input[$key] . '\'';
else if (is_bool($input[$key])) $output .= $this->boolToVal[(int)$input[$key]];
else if (is_array($input[$key])) $output .= $this->progressArray($name, $input[$key]);
$i ++;
}
}
else
{
for ($i = 0; $i < count($input); $i ++)
{
if ($i > 0) $output .= ', ';
if (is_numeric($input[$i])) $output .= $input[$i];
else if (is_string($input[$i])) $output .= '\'' . $input[$i] . '\'';
else if (is_bool($input[$i])) $output .= $this->boolToVal[(int)$input[$i]];
else if (is_array($input[$i])) $output .= $this->progressArray($name, $input[$i]);
}
}
$output .= ')';
return $output;
}
private function is_assoc($array)
{
return (bool)count(array_filter(array_keys($array), 'is_string'));
}
}
?>
Feedback is altijd welkom!