<?php
class File {
	protected $resource;
	
	protected function __construct() {
		// objekt nepůjde zvenku přímo vytvořit
	}
	
	static function createFromFile($filename, $mode) {
		$return = new self; // vytvoří objekt třídy File
		// od PHP 5.3 lze místo self použít static - vytvoří i potomky
		$return->resource = fOpen($filename, $mode);
		return $return;
	}
	
	static function createFromSocket($hostname, $port = -1) {
		$return = new self;
		$return->resource = fSockOpen($hostname, $port);
		return $return;
	}
}

$file = File::createFromFile(__FILE__, "r");