Требуется получить значение: $itemview2=$imp->floor; Слово floor подсвечивается, т.к. это команда php. Как её экранировать?
Будет. И даже так: Код (PHP): class floor { private $floor=0; public function __construct($floor) { $this->floor=$floor; } public function floor() { return floor($this->floor); } } $floor=new floor(10.0534); echo $floor->floor();
IDE типа нотепада не понимают таких пропертей, да. Если смущает то можно посадить в скобки и IDE узбагоится: $this->{for}='next'; аналогично если ключ нельзя записать нормально $this->{'data-value'}='2014';
Вообще бест-практис НЕ ЮЗАТЬ зарезервированные в системе слова. Никогда. "Но мне так хочется использовать слова, которые уже заняты!!!" На этот случай можно начинать имена всех переменных/свойств с нижнего подчеркивания. $onject->_floor Или придумать/найти в интернете другие принципы нейминга, более удобные вам. Импровизируйте.
Зарезервированные слова и конструкции языка использовать и не получится. Хотя в объекте должно пашить, пашет только свойствами, методы нельзя назвать.
Методы тоже можно. Это же контекст геттеров и сеттеров, то есть заранее неизвестный. Специально же никто не будет называть переменную (проперть) floor или метод for. Оно само внезапно возникает, но благодаря тому же самому контексту все работает как из пистолета. В геттере for станет например get_for() и все.
Типо как переопределение походу =))) Код (PHP): <?php final class php { private $scandir=array(); public function session_start() { $status=false; if(version_compare(PHP_VERSION, '5.4.0', '>=') && PHP_SESSION_ACTIVE!==session_status()) { $status=true; } else if(!session_id()) { $status=true; } if(!$status) { session_start(); } } public function error_reporting($level=0) { error_reporting($level); } public function object($name) { if(class_exists($name)) { $args=func_get_args(); if(1==sizeof($args)) { return new $name; } else { array_shift($args); foreach($args as $key => $value) { if(is_string($value)) { if(false!==strpos($value,'"') || false!==strpos($value,"'")) { if(false!==strpos($value,'\\')) { $value=preg_replace('/\\\/','',$value); } $args[$key]='"'.addslashes($value).'"'; } } } return eval('return new '.$name.'('.join(',',$args).');'); } } } public function scandir($dir) { $scandir=scandir($dir); foreach($scandir as $value) { if('.'===$value || '..'===$value) { continue; } if(is_dir($dir=$dir.$value)) { $this->scandir[$value]=$dir; } } return $this->scandir; } } $php=new php; Пример: Код (PHP): class name { public $a,$b; function __construct($a,$b) { $this->a=$a; $this->b=$b; } } $name=php::object('name',1,'str\"dd'); echo $name->a.' '.$name->b; Прикольно =))
Прикол: Код (PHP): final class this { public function this($property='') { $args=func_get_args(); if(!$property) { return $this; } else if(is_string($property) && $property) { if(1==sizeof($args)) { if(property_exists($this,$property)) { return $this->{$property}; } } else { $this->{$property}=$args[1]; } } return''; } } Код (PHP): $self=new this; Код (PHP): $self->this('one',10); $self->this('two',array('один','два')); echo $self->this('one').' - '.print_r($self->this('two'),true); 10 - Array ( [0] => один [1] => два ) Код (PHP): print_r($self->this()); this Object ( [one] => 10 [two] => Array ( [0] => один [1] => два ) ) Код (PHP): $self->this('three',new DOMDocument); print_r($self->this('three')); DOMDocument Object ( [doctype] => [implementation] => (object value omitted) [documentElement] => [actualEncoding] => [encoding] => [xmlEncoding] => [standalone] => 1 [xmlStandalone] => 1 [version] => 1.0 [xmlVersion] => 1.0 [strictErrorChecking] => 1 [documentURI] => [config] => [formatOutput] => [validateOnParse] => [resolveExternals] => [preserveWhiteSpace] => 1 [recover] => [substituteEntities] => [nodeName] => #document [nodeValue] => [nodeType] => 9 [parentNode] => [childNodes] => (object value omitted) [firstChild] => [lastChild] => [previousSibling] => [attributes] => [ownerDocument] => [namespaceURI] => [prefix] => [localName] => [baseURI] => [textContent] => ) Можно расшарить еще с помощью callable ну это только 5.4 и выше. 5.4>= Код (PHP): $self->this('summa',function($a,$b) { return $a+$b; }); $summa=$self->this('summa'); echo $summa(151,325); //474 Ниже версии: Придется еще дописать create_function в нутри класса, а функцию передать строкой Код (PHP): $self->this('summa','function($a,$b) { return $a+$b; }'); $summa=$self->this('summa'); echo $summa(151,325); //474