2013-12-18 2 views
5

Я использовал следующие коды сам, оба они дали тот же результат. Тогда почему мы используем класс вместо нормальной функции и в чем разница между классами и функциями.В чем разница между классом и функцией в php?

<?php 

class MyClass{ 

    public $property = "This is My Class Property"; 

    public function getProperty(){ 

     echo $this->property."<br />"; 

    } 

} 

$obj=new MyClass(); 
echo $obj->getProperty(); 

?> 


<?php 

    function getProp(){ 

     $prop="This is My Class Property"; 

     echo $prop; 

    } 

    getProp(); 

?> 
+8

Посмотрите, что такое «объектно-ориентированное программирование» и посмотрите, понимаете ли вы это. Если вы этого не сделаете, задайте здесь больше вопросов :) – mtahmed

+0

http://www.webdeveloper.com/forum/showthread.php?199467-Differences-between-PHP-Classes-and-Straight-Include-Functions – JakeGould

+0

Подробнее о ООП. Не только в отношении PHP, но и в целом. Там вы найдете свой ответ. – AlexKey

ответ

15

РНР Язык ссылка содержит информацию о том, что функция и класс: http://www.php.net/manual/en/langref.php

Это также объясняет большинство других особенностей PHP. Если вы хотите изучить PHP, это лучшее место для начала.

Функции

Функция представляет собой группировку операторов (строк кода).

Например следующие утверждения:

$name = 'mary'; 
$gender = 'girl'; 
if ($gender == 'girl') { 
    $line = $name . ' had a little pony.'; 
} else if ($gender == 'boy') { 
    $line = $name . ' had a little horse.'; 
} 
echo $line; 

могут быть сгруппированы вместе в функцию, так что он может быть использован повторно:

getSentence('mary', 'girl'); 
getSentence('peter', 'boy'); 
function getSentence($name, $gender) { 
    if ($gender == 'girl') { 
    $line = $name . ' had a little pony.'; 
    } else if ($gender == 'boy') { 
    $line = $name . ' had a little horse.'; 
    } 
    echo $line; 
} 

Обратите внимание на два вызова функции:

getSentence('mary', 'girl'); 
getSentence('peter', 'boy'); 

Эти два оператора запускают весь блок кода внутри функции getSentence и передают ему v ariables $ name и $ gender. С первой функцией $name = 'mary' и $gender = 'girl' и во втором $name = 'peter' и $gender = 'boy'.

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

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

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

например:

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

function getSentence($name, $gender) { 
    $name = ucfirst($name); 
    if ($gender == 'girl') { 
    $line = $name . ' had a little pony.'; 
    } else if ($gender == 'boy') { 
    $line = $name . ' had a little horse.'; 
    } 
    echo $line; 
} 

Мы выполнили только одно изменение, и это повлияло на любой вызов функции getSentence(). В этом случае как:

getSentence('mary', 'girl'); 

и

getSentence('peter', 'boy'); 

Классы группирование функций.

class Play { 
    function getSentence($name, $gender) { 
    $name = ucfirst($name); 
    if ($gender == 'girl') { 
     $line = $name . ' had a little pony.'; 
    } else if ($gender == 'boy') { 
     $line = $name . ' had a little horse.'; 
    } 
    echo $line; 
    } 
    function getSong($name) { 
    // code here 
    } 
} 

Все, что мы сделали был поставлен

class Play { /** functions here **/ } 

вокруг группы функций.

Это дает те же преимущества, что и функции для операторов, кроме классов, для функций.

Классы идут дальше, чтобы создать методологию программирования, называемую объектно-ориентированным программированием (ООП), о которой вы можете узнать больше в ссылке на ссылку на PHP-язык.

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

Таким образом, класс Play можно рассматривать как объект под названием «Играть» с методами «getSentence» и «getSong». Эти методы затем могут манипулировать свойствами объекта «Воспроизвести» или возвращать полезную информацию о «Воспроизвести». Таким образом, весь код внутри Play становится независимым от кода в другом месте программы.

Когда код внутри Play требует использования какого-либо кода в другом месте, его можно использовать с использованием «наследования», которое является основной частью ООП. Я не буду вдаваться в подробности об этом, поскольку это очень широкая тема.

Я бы рекомендовал получить книгу о ООП и прочитать ее, чтобы понять, почему вы должны использовать классы и методы и когда их использовать.

+0

Спасибо за ваш ответ Mr/Mrs. 웃 웃웃 웃웃. :) –

+0

Добро пожаловать @ Śĭr.μàηǒʝκĭψàη .. Счастливое кодирование .. –

+0

Отличное объяснение! Чтение книги не очень хорошо объясняет это, я новичок в программировании, прочитал несколько книг и даже обыскал разницу. Да, я понимаю ученых, но я еще не применял их. Я все еще пишу свой код как функции, это действительно помогло. – user2004820

0

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

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

Скажите, что вы вытаскиваете пользователя из базы данных. Вы должны были бы назначить много переменных на нескольких страницах, если бы у вас была какая-то сложность для вашей системы-члена.

Простой способ будет ..

$user = new user(2)[/php) (assuming user is the class, and 2 is the userid it pulls from the databse, your contructor function would populate all of the users information, which is easily grouped together and used like... 

[code=php:0]print "Hello ". $user->firstName . " welcome to thiswebsite. Your last login was " . $user->lastLogin 

Это действительно маленький и глупый пример, но если вы позволите себе думать немного по возможности (и это не будет только один, полиморфизм Еще одна интересная особенность из классов)

0

Обычно, когда вы используете функцию, которую вы собираетесь получить от нее один раз, а затем функция забудет данные, которые она отправила вам (если вы не создаете переменную сайта или константу в ней ...)

Класс, который вы, возможно, захотите создайте, если вы хотите продолжать использовать информацию. Например, клиент подписывается и хочет просмотреть шесть разных страниц об их учетной записи. Вероятно, вы захотите создать класс, чтобы сразу после входа клиента вы получили информацию об этом клиенте, что вам не нужно постоянно делать звонки в sql.

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

+1

можете ли вы отправить пример ??? – mandza

0

Любая функция может быть вызвана как конструктор с ключевым словом new, а свойство prototype этой функции используется для того, чтобы объект наследовал методы.

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

Однако эти процедуры зависят друг от друга. что поднимает пистолет, ничего не значит.

в классах, однако вы можете создавать объекты.

В объектах вы можете создать, например, пистолет. этот пистолет имеет различные функции, связанные с ним, например, поднимая пистолет, прицеливаясь.

Фактически объект может существовать самостоятельно и может использоваться повторно для последующих целей.

class SimpleClass 
{ 
    // property declaration 
    public $var = 'a default value'; 

    // method declaration 
    public function displayVar() { 
     echo $this->var; 
    } 
} 

поэтому, когда вы хотите использовать объект класса вы должны объявить

$objectSimple = new SimpleClass(); 

и когда вы хотите использовать метод класса, чем вам нужно объявить

$objectSimple->displayVar(); 

как в ваш пример

<?php 

class MyClass{ 

    public $property = "This is My Class Property"; 

    public function getProperty(){ 

     echo $this->property."<br />"; 

    } 

} 

$obj=new MyClass(); 
echo $obj->getProperty(); 

?> 


<?php 

    function getProp(){ 

     $prop="This is My Class Property"; 

     echo $prop; 

    } 

    getProp(); 

?> 

да вы оба будете работать. после рассмотрения вашего образца кажется, что вы просите OOP против процедурного.

У них действительно нет плюсов и минусов, ИМО. Это просто разные подходы к тем же проблемам.

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

В объектно-ориентированном стиле данные имеют тенденцию нести с собой набор функций.

В функциональном стиле данные и функции имеют тенденцию иметь больше общего друг с другом (как в Lisp и Scheme), предлагая большую гибкость в плане того, как фактически используются функции. Алгоритмы также должны быть определены в терминах рекурсии и композиции, а не циклов и итераций.

Конечно, сам язык влияет только на то, какой стиль является предпочтительным.

Смежные вопросы