За последние 24 часа нас посетили 18892 программиста и 1708 роботов. Сейчас ищут 920 программистов ...

Как экранировать?

Тема в разделе "PHP для новичков", создана пользователем Stivins, 3 окт 2014.

  1. Stivins

    Stivins Активный пользователь

    С нами с:
    3 окт 2014
    Сообщения:
    6
    Симпатии:
    0
    Требуется получить значение:
    $itemview2=$imp->floor;

    Слово floor подсвечивается, т.к. это команда php.

    Как её экранировать?
     
  2. rognorog

    rognorog Новичок

    С нами с:
    7 июл 2014
    Сообщения:
    330
    Симпатии:
    0
    И, что теперь, что она подсвечивает?
     
  3. Stivins

    Stivins Активный пользователь

    С нами с:
    3 окт 2014
    Сообщения:
    6
    Симпатии:
    0
    так будет работать такая конструкция?
    нет возможности проверить
     
  4. rognorog

    rognorog Новичок

    С нами с:
    7 июл 2014
    Сообщения:
    330
    Симпатии:
    0
    Будет.
    И даже так:
    Код (PHP):
    1. class floor {
    2.     private $floor=0;
    3.     public function __construct($floor) {
    4.         $this->floor=$floor;
    5.     }
    6.     public function floor() {
    7.         return floor($this->floor);
    8.     }
    9. }
    10. $floor=new floor(10.0534);
    11. echo $floor->floor();
     
  5. Stivins

    Stivins Активный пользователь

    С нами с:
    3 окт 2014
    Сообщения:
    6
    Симпатии:
    0
    Спасибо, добрый человек
     
  6. rognorog

    rognorog Новичок

    С нами с:
    7 июл 2014
    Сообщения:
    330
    Симпатии:
    0
    Обращайся =)))
     
  7. deblogger

    deblogger Новичок

    С нами с:
    11 июл 2013
    Сообщения:
    200
    Симпатии:
    0
    IDE типа нотепада не понимают таких пропертей, да. Если смущает то можно посадить в скобки и IDE узбагоится:

    $this->{for}='next';

    аналогично если ключ нельзя записать нормально

    $this->{'data-value'}='2014';
     
  8. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Вообще бест-практис НЕ ЮЗАТЬ зарезервированные в системе слова. Никогда.
    "Но мне так хочется использовать слова, которые уже заняты!!!"
    На этот случай можно начинать имена всех переменных/свойств с нижнего подчеркивания. $onject->_floor
    Или придумать/найти в интернете другие принципы нейминга, более удобные вам. Импровизируйте.
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    это тугой мифологический бестпрактис от священников. Люди разумные мыслят критически.
     
  10. rognorog

    rognorog Новичок

    С нами с:
    7 июл 2014
    Сообщения:
    330
    Симпатии:
    0
    Зарезервированные слова и конструкции языка использовать и не получится.
    Хотя в объекте должно пашить, пашет только свойствами, методы нельзя назвать.
     
  11. deblogger

    deblogger Новичок

    С нами с:
    11 июл 2013
    Сообщения:
    200
    Симпатии:
    0
    Методы тоже можно. Это же контекст геттеров и сеттеров, то есть заранее неизвестный. Специально же никто не будет называть переменную (проперть) floor или метод for. Оно само внезапно возникает, но благодаря тому же самому контексту все работает как из пистолета. В геттере for станет например get_for() и все.
     
  12. rognorog

    rognorog Новичок

    С нами с:
    7 июл 2014
    Сообщения:
    330
    Симпатии:
    0
    Типо как переопределение походу =)))
    Код (PHP):
    1. <?php final class php {
    2.     private $scandir=array();
    3.     public function session_start() {
    4.         $status=false;
    5.         if(version_compare(PHP_VERSION, '5.4.0', '>=') && PHP_SESSION_ACTIVE!==session_status()) {
    6.             $status=true;
    7.         } else if(!session_id()) {
    8.             $status=true;
    9.         }
    10.         if(!$status) {
    11.             session_start();
    12.         }
    13.     }
    14.     public function error_reporting($level=0) {
    15.         error_reporting($level);
    16.     }
    17.     public function object($name) {
    18.         if(class_exists($name)) {
    19.             $args=func_get_args();
    20.             if(1==sizeof($args)) {
    21.                 return new $name;
    22.             } else {
    23.                 array_shift($args);
    24.                 foreach($args as $key => $value) {
    25.                     if(is_string($value)) {
    26.                         if(false!==strpos($value,'"') || false!==strpos($value,"'")) {
    27.                             if(false!==strpos($value,'\\')) {
    28.                                 $value=preg_replace('/\\\/','',$value);
    29.                             }
    30.                             $args[$key]='"'.addslashes($value).'"';
    31.                         }
    32.                     }
    33.                 }
    34.                 return eval('return new '.$name.'('.join(',',$args).');');
    35.             }
    36.         }
    37.     }
    38.     public function scandir($dir) {
    39.         $scandir=scandir($dir);
    40.         foreach($scandir as $value) {
    41.             if('.'===$value || '..'===$value) {
    42.                 continue;
    43.             }
    44.             if(is_dir($dir=$dir.$value)) {
    45.                 $this->scandir[$value]=$dir;
    46.             }
    47.         }
    48.         return $this->scandir;
    49.     }
    50. }
    51. $php=new php; 
    Пример:
    Код (PHP):
    1. class name {
    2.     public $a,$b;
    3.     function __construct($a,$b) {
    4.         $this->a=$a;
    5.         $this->b=$b;
    6.     }
    7. }
    8.  
    9. $name=php::object('name',1,'str\"dd');
    10. echo $name->a.' '.$name->b; 
    Прикольно =))
     
  13. rognorog

    rognorog Новичок

    С нами с:
    7 июл 2014
    Сообщения:
    330
    Симпатии:
    0
    Прикол:
    Код (PHP):
    1. final class this {
    2.     public function this($property='') {
    3.         $args=func_get_args();
    4.         if(!$property) {
    5.             return $this;
    6.         } else if(is_string($property) && $property) {
    7.             if(1==sizeof($args)) {
    8.                 if(property_exists($this,$property)) {
    9.                     return $this->{$property};
    10.                 }
    11.             } else {
    12.                 $this->{$property}=$args[1];
    13.             }
    14.         }
    15.     return'';
    16.     }
    17. } 
    Код (PHP):
    1. $self=new this; 
    Код (PHP):
    1. $self->this('one',10);
    2. $self->this('two',array('один','два'));
    3. echo $self->this('one').' - '.print_r($self->this('two'),true);
    10 - Array ( [0] => один [1] => два )
    Код (PHP):
    1. print_r($self->this()); 
    this Object ( [one] => 10 [two] => Array ( [0] => один [1] => два ) )
    Код (PHP):
    1. $self->this('three',new DOMDocument);
    2. 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):
    1. $self->this('summa',function($a,$b) {
    2.     return $a+$b;
    3. });
    4. $summa=$self->this('summa');
    5. echo $summa(151,325); //474 
    Ниже версии:
    Придется еще дописать create_function в нутри класса, а функцию передать строкой
    Код (PHP):
    1. $self->this('summa','function($a,$b) {
    2.     return $a+$b;
    3. }');
    4. $summa=$self->this('summa');
    5. echo $summa(151,325); //474