Skip to content

Instantly share code, notes, and snippets.

@sycue
Last active November 8, 2023 08:38
Show Gist options
  • Save sycue/7382545 to your computer and use it in GitHub Desktop.
Save sycue/7382545 to your computer and use it in GitHub Desktop.
PHP Procedural vs. Object-Oriented Programming (OOP)
<?php
// Procedural
function example_new() {
return array(
'vars' => array()
);
}
function example_set($example, $name, $value) {
$example['vars'][$name] = $value;
return $example;
}
function example_get($example, $name) {
$value = isset($example['vars'][$name]) ? $example['vars'][$name] : null;
return array($example, $value);
}
$example = example_new();
$example = example_set($example, 'foo', 'hello');
list($example, $value) = example_get($example, 'foo');
// OOP
class Example
{
private $vars = array();
public function set($name, $value)
{
$this->vars[$name] = $value;
}
public function get($name)
{
return isset($this->vars[$name]) ? $this->vars[$name] : null;
}
}
$example = new Example();
$example->set('foo', 'hello');
$value = $example->get('foo');
?>
@tbreuss
Copy link

tbreuss commented Apr 30, 2022

The procedural style could be even better or clearer using namespaces.

namespace example;

function init() { // new is a reserved keyword
  return [];
}

function set(&$example, $name, $value) {
  $example[$name] = $value;
}

function get($example, $name) {
  return isset($example[$name]) ? $example[$name] : null;
}

And then in another script (or namespace):

use example;

$example = example\init();
example\set($example, 'foo', 'hello');
$value = example\get($example, 'foo');

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment