2009-10-13 78 views
9

Hay mọi người. Tôi là người mới với OOP trong PHP. Tôi đã học được cách viết và tạo ra các đối tượng. Có cách nào để lấy một vật thể và truyền nó cho một kịch bản khác không? hoặc sử dụng GET hoặc POST hoặc SESSION hoặc bất kỳ thứ gì. Nếu không có làm thế nào tôi sẽ chỉ định một đối tượng một số biến trên một trang, sau đó gán cùng một đối tượng nhiều biến trên một trang khác?di chuyển đối tượng từ trang này sang trang khác?

Cảm ơn

Trả lời

14

Bạn có thể lưu trữ các đối tượng trong phiên nhưng bạn cần bao gồm tệp chứa định nghĩa lớp trước khi gọi session_start() (hoặc sử dụng class autoloading và thiết lập điều này trước khi bạn bắt đầu phiên). Ví dụ:

Trên mỗi trang:

//include class definition 
require('class.php'); 

//start session 
session_start(); 

1st page:

$object = new class(); 
$object->someProperty = 'hello'; 

//store in session 
$_SESSION['object'] = $object; 

trang tiếp theo:

$object = $_SESSION['object']; 

//add something else, which will be stored in the session 
$object->anotherPropery = 'Something'; 
+0

Cảm ơn! Ví dụ hoàn hảo. Ngoài ra tôi không biết về phương pháp __autoload. – dotty

1

Bạn có thể sử dụng $ _SESSION. nhưng nó sẽ chỉ dành cho phiên đó.

2

Bạn có thể lưu trữ đối tượng trong SESSION. Bạn có thể tuần tự hóa đối tượng và chuyển qua GET hoặc POST.

Nếu bạn muốn đối tượng tồn tại trên toàn bộ trang web, thì SESSION có lẽ là lựa chọn tốt nhất của bạn.

+0

Cảm ơn, có vẻ như SESSION là đặt cược tốt nhất – dotty

1

Sử dụng object trên nhiều 'tập lệnh':

Trước tiên, bạn phải quyết định loại cấu trúc mà ứng dụng OOP của bạn có. Nếu bạn sử dụng một cái gì đó như MVC pattern, bạn không phải làm điều này bằng cách sử dụng SESSION hoặc YÊU CẦU, bởi vì bạn có thể 'cắm' các đối tượng bạn muốn sử dụng vào 'một'. Điều này có nghĩa là gì?

Một ví dụ nhanh:

  1. dùng A vào trang web của bạn index.php
  2. Bây giờ bạn có thể tải nội dung từ một index.html tĩnh, nhưng nếu bạn muốn kiểm tra xem người dùng được xác thực để xem các nội dung cụ thể 'Đăng nhập quản trị viên', bạn có thể sử dụng include_once('Authentication.php') và bắt đầu một lớp học từ tệp này, ví dụ: <?php $Auth = new Auth_Handler; ?> Điều này sẽ làm cho lớp Auth cũng có sẵn trong tệp index.php hoặc bất kỳ tệp nào khác mà bạn muốn đưa vào lớp này. Nếu bạn muốn chuyển giá trị trả về của lớp xác thực cho một tệp khác, ví dụ: 'register.php' bạn có thể sử dụng SESSION hoặc bất kỳ Cache nào khác. Việc truyền toàn bộ đối tượng không được khuyến nghị do kích thước của chúng. Bao gồm và khởi tạo các lớp mong muốn ở đầu tệp là tốt hơn nhiều. Và chuyển lợi tức bằng SESSION sử dụng ít không gian hơn.

Nó thực sự phụ thuộc vào khung hoặc API bạn muốn sử dụng hoặc dự án bạn muốn tạo.

3

Dưới đây là một ví dụ với tự động load trong mối liên quan với câu trả lời của Tom Haigh:

Trước khi bắt đầu phiên họp:

function __autoload($className) { 
    $file = PATH_TO_FOLDER_WITH_ALL_CLASS_FILES."/".$className.'.php'; 
    if(file_exists($file)) { 
     require_once $file; 
    } 
} 

session_start(); 

Trang đi qua các đối tượng:

$object = new class(); 
$object->someProperty = 'hello'; 

//store in session 
$_SESSION['object'] = $object; 

Trang nhận đối tượng:

$object = $_SESSION['object']; 

//add something else, which will be stored in the session 
$object->anotherPropery = 'Something'; 

Phương pháp tự động tải sẽ tự động tải các đối tượng trong khi bạn truy xuất dữ liệu từ phiên.

Các vấn đề liên quan