php, perl, вопрос.что это значит: "переменная $ -> сделать какую-то функцию" - PullRequest
5 голосов
/ 05 мая 2011

Я видел это (пример: переменная $ -> определить что-то ) как в perl, так и в php, но я никогда не использовал это раньше.Какова цель этого оператора -> Назначает ли он значение или передает параметр?

Спасибо

Ответы [ 3 ]

9 голосов
/ 05 мая 2011

В Perl оператор -> означает как разыменование, так и вызов, в зависимости от того, что находится справа от оператора.Если rhs - это индекс в скобках, [...], {...} или (...) - разыменование.Если это скаляр $some_name или голое слово some_name, то он вызывает вызов метода.

my $array_ref = [1, 2, 3];

say $array_ref->[2];  # prints 3
say $$array_ref[2];   # also prints 3

my $hash_ref = {a => 1, b => 2};

say $hash_ref->{b};   # prints 2
say $$hash_ref{b};    # also prints 2

my $code_ref = sub {"[@_]"};

say $code_ref->('hello');  # prints "[hello]"
say &$code_ref('hello');   # also prints  "[hello]"

my $object = Some::Package->new();

$object->some_method(...);  # calls 'some_method' on $object

my $method = 'foo';

$object->$method(...);   # calls the 'foo' method on $object

$object->$code_ref(...);  # same as $code_ref->($object, ...)

Лично я предпочитаю использовать форму разыменования с двойным знаком для массивов и хэшей и использовать -> только для вызова кодовых ссылок и для вызова методов.

3 голосов
/ 05 мая 2011

Что касается perl, оператор -> может означать:

О, и, может быть, я кое-что забыл.

0 голосов
/ 05 мая 2011

PHP

Он используется в ООП, это может быть метод (но тогда в конце может быть () в конце) или свойство класса.Я не знаю Perl, поэтому я не могу сказать вам, что это такое, но для php: Пример, который, надеюсь, прояснит что-то:

Мы можем сделать объект класса в php следующим образом:

$object = new MyClass();

Теперь, если у нас есть метод в том, что называется peer, вы бы назвали его так:

$object -> getInstance();

И если у нас есть свойство в том же классе с именем spoon, вы бы повторили его так:

echo $object -> instance;

Это работает, но вы также можете создать метод получения в своем классе И небольшой пример класса:

class MyClass { 

   // property instance 
   private $instance; 

   protected __construct() 
   { 

   } 
   // getInstance method 
   protected static function getInstance() 
   { 
      return $this -> instance;
   }
}

Возможно, вы захотите взглянуть здесь http://php.net/manual/en/language.oop5.php

Perl

Оператор стрелки в основном используется при разыменовании метода или переменной из объекта или имени класса $obj->$a - пример доступа к переменной $a из объекта$obj.Он также может использоваться для вызова методов, например: $obj->$a() Для получения дополнительной информации посетите этот URL: http://perldoc.perl.org/perlop.html#The-Arrow-Operator

...