Trong PHP (và OOP nói chung), hàm (function)phương thức (method) gần giống nhau về bản chất, nhưng khác nhau về phạm vi, cách gọi và mục đích sử dụng. Dưới đây là cách hiểu chuẩn – đúng thuật ngữ – dễ nhớ.


1️⃣ Hàm (Function) là gì?

Hàmđoạn mã độc lập, không thuộc về class nào.

Ví dụ hàm

function sum($a, $b) {
    return $a + $b;
}
echo sum(3, 5);

👉 Hàm có thể gọi trực tiếp, ở bất kỳ đâu (nếu trong scope).


2️⃣ Phương thức (Method) là gì?

Phương thứchàm nằm bên trong class, và phải gọi thông qua object hoặc class.

Ví dụ phương thức

class Calculator {
    public function sum($a, $b) {
        return $a + $b;
    }
}
$cal = new Calculator();
echo $cal->sum(3, 5);

👉 sum() lúc này là method, không còn là function.


3️⃣ So sánh nhanh: Hàm vs Phương thức

Tiêu chíHàm (Function)Phương thức (Method)
Thuộc vềKhông thuộc classThuộc class
OOP❌ Không✅ Có
Cách gọisum()$obj->sum()
Truy cập $this❌ Không✅ Có
Access modifier❌ Khôngpublic / protected / private
Static
Tính đóng gói

4️⃣ $this – điểm khác biệt quan trọng

❌ Hàm không có $this

function test() {
    echo $this->name; // ❌ lỗi
}

✅ Phương thức có $this

class User {
    public $name = "Nam";
    public function showName() {
        echo $this->name;
    }
}

5️⃣ Method static vs function

Static method

class Math {
    public static function square($x) {
        return $x * $x;
    }
}
echo Math::square(5);

Function

function square($x) {
    return $x * $x;
}

🔍 Khác nhau:

  • Static method nằm trong class
  • Có thể dùng namespace & kế thừa
  • Thường dùng trong OOP, framework

6️⃣ Khi nào dùng hàm? Khi nào dùng phương thức?

✅ Dùng hàm khi:

  • Xử lý logic chung, tiện ích
  • Không cần trạng thái (state)
  • Ví dụ: format_date(), slugify()

✅ Dùng phương thức khi:

  • Logic gắn với đối tượng
  • Có dữ liệu riêng ($this)
  • Dùng trong MVC, Service, Model

📌 Framework (CI, Laravel, WP) → gần như toàn method


7️⃣ Ví dụ thực tế (CodeIgniter 3)

class Post_model extends CI_Model {
    public function getById($id) {
        return $this->db->get_where('posts', ['id' => $id])->row();
    }
}

getById() = method
$this->db = trạng thái của object


8️⃣ Bảng ghi nhớ nhanh (rất dễ nhớ)

🔹 Function = độc lập
🔹 Method = function + class

Hoặc:

❝ Method chính là function sống trong class ❞


9️⃣ Câu hỏi hay gặp

❓ Method có phải là function không?

👉 Có về mặt kỹ thuật, nhưng khác về ngữ cảnh sử dụng

❓ Có thể gọi method như function không?

👉 ❌ Không (trừ static gọi qua ::)