Объектно-ориентированное программирование давно уже стало неотъемлемой частью работы большинства программистов. Процедурный стиль хорош для выполнения мелких задач. Для более сложных решений, безусловно, использования ООП будет оправданным. К тому же, сейчас все современные фреймворки активно используют ООП. Ниже список основ и полезных фишек. Список пополняется.

Свойство объекта — это переменная
Метод объекта — это функция
$obj = new Class();
$obj->method(); // это обращение к методу класса
$obj->property; // это обращение к свойству класса
function __construct(){} // это метод, который срабатывается во момент создания объекта
function __destruct(){}  // это метод, который срабатывается во момент удаления объекта
//!!!важно!!!
//в конструктор можно передавать переменные (аргументы)
//в деструктор нельзя, так как если передать переменную, которая будет удалена, то это приведет к ошибке
echo __CLASS__; // выведет название класса
echo __METHOD__; // выведет название метода класса (объект::метод)
public    // могу получить доступ из кода и из классов(родительский и наследуемый)
protected // могу получить доступ только из классов(родительский и наследуемый)
private   // могу получить доступ только из родительского класса
parent::method();
foreach ($object as $name => $value) {
  echo "$name: $value";
}
// $object можно заменить на $this (если я использую это внутри класса), чтоб указать, что можно использовать любой объект, а не какой-то конкретно
const CONST_NAME = 'данные константы'; // объявление константы в классах
echo USER::CONST_NAME; // вывод константы вне класса, где USER это название класса, а CONST_NAME это название константы
echo self::CONST_NAME; // вывод константы внутри класса, где CONST_NAME это название константы
if ($object instanceof Class) {}
try{
 // some code
 if ($error) throw new Exception("Ошибка!");
} catch(Exception $e) {
  echo $e->getMessage();
}
class MyException extends Exception
{
	function __construct($msg) {
	  parent::__construct($msg);
	}
}
abstract class MyClass {}
// Так же нужно перегружать методы
interface MyClass{}
class MyNaslednik implements MyClass{}
final function Mymethod(){}

Если представить себе ситуацию, что вы используете несколько экземпляров разных классов и чтоб избавиться от бесконечных include (require), лучше один раз указать ФУНКЦИЮ!!! __autoload()

// Это функция, а не метод
function __autoload($className){
  include($className);
}

__set() - срабатывает автоматически в том случае, когда мы присваиваем какое-то значение не известному(не объявленному) свойству

function __set($objName, $objValue) {
  $this->someVar[$objName] = $objValue;
}

_get() - срабатывает автоматически в том случае, когда мы пытаемся получить значение не известного(не объявленного) свойства

function __get($objName) {
  return $this->someVar[$objName];
}

__call() срабатывает автоматически в том случае, когда мы пытаемся вызвать не известный(не объявленный) метод

function __call($methodName, $params){}

__toString() - срабатывает автоматически в том случае, когда мы пытаемся вывести объект

$obj = name Class();
echo $obj;
function __toString() {
  // some code ...
}