Функция вызова PHP в классе - Есть ли более простой способ? - PullRequest
3 голосов
/ 07 октября 2011

Я очень новичок в ООП и очень ржавый на PHP. Мне было интересно, если это допустимый метод для вызова функции из класса?

class newclass {
    public function testfunc {
        return '1';
    }
}

Могу ли я назвать это так:

echo testfunc->newclass();

или как это:

echo newclass()::testfunc;

Я всегда вижу его в примерах, как показано ниже, и он выглядит как дополнительный код?

$this = new newclass();
$this->testfunc();
echo $this;

Любая помощь будет принята с благодарностью, так как я только начинаю оборачиваться вокруг этой ООП. Если я пойду на ланч, возможно, кто-нибудь может предложить ссылку на действительно хорошее руководство для истинного новичка в уроках / ООП. Спасибо!

Ответы [ 5 ]

4 голосов
/ 07 октября 2011

Оба способа работают и имеют свои варианты использования.

Ваш первый случай - это обычный вызов функции с использованием экземпляра класса, а второй - вызов статической функции.

Static следует использовать с осторожностью, и его использование очень часто является признаком необходимости рефакторинга / редизайна.

Смысл объектно-ориентированного программирования состоит в том, чтобы моделировать мир путем написания классов (чертежей), а затем создавать столько независимых экземпляров этого класса со словом «новый», сколько необходимо. Каждый экземпляр - это маленький организм с ДНК класса, и вы можете вызывать один и тот же метод класса в каждом отдельном случае, не влияя на другие экземпляры.

Статический вызов, однако, не связан с экземпляром класса, и поэтому не используется ни один объект. Это глобальный вызов функциональности некоторых инструментов, который фактически разрушает идею инкапсуляции.

Итак, я не говорю, что для статических классов и методов нет вариантов использования, но их следует использовать с осторожностью.

2 голосов
/ 07 октября 2011

new - ключевое слово для создания экземпляра класса. Если вы хотите использовать метод без экземпляра класса, это должен быть статический метод. чтобы иметь статический метод, объявите метод как статический.

class foo
{
    public static function bar()
    {
        return 'hello!'; 
    }
}

Как это использовать?

echo foo::bar(); //Will print hello
1 голос
/ 07 октября 2011

Вы можете сделать testfunc статическим и назвать его так:

class newclass{

  public static function testfunc{

     return '1';
  }
}

echo newclass::testfunc();

Нет ничего подобного echo testfunc->newclass();, и делать это как

$class = new newclass();
echo $class->testfunc();

- правильный путь.делать это, когда метод является методом экземпляра, а не статическим. Примечание , в статическом методе нет возможности ссылаться на $this.

0 голосов
/ 07 октября 2011

Вы можете создать статическую оболочку для конструктора, которая позволяла бы связывать вызовы методов в одной строке.

<?php

class ClassA {

     static function create() { return new self(); }

     function method1() { ... }

}


ClassA::create()->method1();
0 голосов
/ 07 октября 2011

вы можете включить php-файл, содержащий ваши функции

<?php
//print.php
function printHello(){
echo "Hello world";
}
?>

, затем включить его и вызвать функцию ...

<?php
include "print.php";
printHello();

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...