2011-01-13 35 views
10

Một số mã PHP mà tôi xem xét được rải rác với các thẻ "<? Php" và "? >" tùy thuộc vào việc nó có xuất HTML hay không. Có bất kỳ lợi ích hiệu suất nào cho điều này thay vì sử dụng echo để viết HTML không? Nó làm cho mã cực kỳ khó đọc khi mã liên tục chuyển đổi giữa mã và HTML qua thẻ php <?Sử dụng nhiều thẻ "<? Php" của PHP

Lưu ý rằng tôi không chỉ nói về việc chuyển đổi thường xuyên. Mã mà tôi hiện đang xem (mã nguồn mantis-bt) đang khiến tôi đau đầu với số lần nó chuyển đổi. Rất rất khó đọc. Tôi tự hỏi liệu có lý do gì để họ làm như thế này?

+4

không phải là vấn đề về hiệu suất trừ khi bạn là Facebook. –

+2

Khi trang chủ yếu là HTML, sự đồng thuận (bằng một lề mỏng) có vẻ là việc sử dụng tiếng vọng lớn là hình thức xấu. Mặt khác, nếu trang không tách biệt logic điều khiển và logic nghiệp vụ khỏi màn hình, điều đó cũng được coi là biểu mẫu không hợp lệ. Tôi đã nghe một giai thoại rằng chi phí cho 'echo' có thể so sánh với chi phí chuyển đổi vào và ra khỏi các khối' ', nhưng không thể tìm thấy một tham chiếu cho bạn. – RobertB

+0

bất kể thời tiết facebook của bạn, bạn vẫn nên lắng nghe và học cách sử dụng facebook, cùng với nhiều trang web lớn khác. – RobertPitt

Trả lời

17

Theo như khả năng đọc đi, tôi thà xem:

<ul> 
     <?php foreach ($items as $item): ?> 
      <li> 
       <a href="<?php esc($item->url)?>"> 
       <img src="<?php esc($item->icon)?>"/> 
       <?php esc($item->text)?> 
      </li> 
     <?php endforeach; ?> 
    </ul> 

Thần:

echo "<ul>"; 
    foreach ($items as $item) 
    { 
    echo "<li>"; 
    echo '<a href="'.esc($item->url).'">'; 
    echo '<img src="'.esc($item->icon).'"/>'; 
    echo esc($item->text); 
    echo '</li>'; 
    } 
    echo "</ul>"; 

Không chỉ vậy, nhưng sau này cho phép IDE của bạn lựa chọn xử lý các cú pháp HTML và định dạng (nói với bạn, ví dụ, thiếu </a>). Vì vậy, trừ khi có nhiều điều xảy ra ở giữa các bit ngắn của HTML, <?php có thể thích hợp hơn.

CHỈNH SỬA: về hiệu suất, bất kỳ ai nghiêm túc về tốc độ mã sẽ kích hoạt trình biên dịch trước khi lưu vào bộ nhớ cache sẽ làm cả hai phiên bản giống hệt nhau.

+0

thay vì biểu tượng '' Tại sao không 'img ($ item-> biểu tượng)' – RobertPitt

+0

@Robert bạn có thể muốn thêm văn bản thay thế vào điều đó. – PeeHaa

+0

sau đó là 'img ($ item-> icon," location "," alt ", array (" classes "," here "))' nó có vẻ rất nhiều và khi bạn lấy mẫu từ người dùng thông thường, nó sẽ tuân theo html của bạn do đó làm giảm html không hợp lệ – RobertPitt

0

Trong khi điều này sẽ không tạo ra bất kỳ hiệu ứng đáng chú ý nào theo thời gian chạy mã, ý tưởng rằng đây là nơi duy nhất mà "Hiệu suất" cần được tính toán, là vô lý. Các nhà phát triển tốn tiền. Vì vậy, làm sạch này tất cả lên LÀ một hiệu suất tăng! Hiệu suất của riêng bạn!

Vậy hãy làm đi.

0

PHP cung cấp một số tính năng không được HTML cung cấp, chẳng hạn như vòng lặp. Vì vậy, nếu bạn phải sử dụng vòng lặp nhiều lần trong mã của bạn, bạn phải tiếp tục chuyển đổi giữa các thẻ php và HTML. Hơn nữa, PHP giúp bạn thực hiện kiểm soát phiên không được HTML cho phép. Do đó, điều quan trọng là nhúng PHP trong HTML

Tóm lại, để sử dụng tính năng bổ sung chúng ta phải sử dụng PHP hoặc một số ngôn ngữ khác

+0

Tôi nghĩ rằng bạn đang hiểu sai câu hỏi của tôi. Tôi đang hỏi tại sao mã có chứa rất nhiều mã PHP cảm thấy cần phải chuyển sang không phải PHP liên tục chỉ để lặp lại một số HTML, thay vì chỉ sử dụng lệnh echo. – Dan

2

Lý do nó có thể là như thế là cho các tình huống như thế này:

<?php if($logged_in) { ?> 
    <span class="x">Welcome, <?= $_SESSION['user'] ?></span> 
    <a href="logout.php">Logout</a> 
<?php } ?> 

Thay vì:

<?php 
    if($logged_in) { 
     echo "<span class=\"x\">Welcome, " . $_SESSION['user'] . "</span>"; 
     echo "<a href=\"logout.php\">Lougout</a>"; 
    } 
?> 

có những nhân vật thoát ít phải lo lắng.

+1

Nhưng trong ví dụ của bạn, bạn có thể chỉ sử dụng một trích dẫn thay vì thoát chúng. – Dan

+1

Tại sao bạn không chỉ sử dụng dấu nháy đơn ??? – PeeHaa

+1

Cá nhân tôi cũng thích ví dụ hàng đầu. Nếu bạn muốn thay đổi HTML của mình hoặc được cập nhật từ một trang khác, bạn có thể dễ dàng bỏ nó xuống. – Don

3

Không có lý do gì khác ngoài kịch bản người mới bắt đầu, chỉ cố gắng để có được kết quả cho trang mà không cần suy nghĩ kiến ​​trúc hoặc lập kế hoạch vào hệ thống trong thời gian dài.

Điều bạn nên làm là tách thiết kế của bạn ra khỏi mã php hợp lý của bạn và việc biên dịch thiết kế phải được thực hiện ở cuối thời gian chạy tập lệnh.

nếu bạn thiết kế lại ứng dụng, tôi chắc chắn sẽ khuyên bạn nên bắt đầu với một khuôn khổ vì khung sẽ buộc các thói quen xấu đi theo thiết kế của nó.

Bắt đầu bằng trình viết mã và tạo blog đơn giản, hiểu cách kết nối/chèn/chọn/cập nhật với cơ sở dữ liệu, tìm hiểu cách xử lý phiên, tìm hiểu Bộ điều khiển và nguyên tắc tạo bộ điều khiển.

Sau khi bạn đã có một trò chơi tốt với nó bắt đầu nhìn vào ứng dụng được mã hóa kém từ một khoảng cách không nhìn vào mã hoặc thiết kế nhưng chính xác nó đang làm gì, là nó lấy kết quả từ cơ sở dữ liệu, không có hệ thống người dùng, v.v.

sau đó bắt đầu triển khai lớp cơ sở của ứng dụng như trên, khi bạn đã thiết kế cơ sở dữ liệu, bạn có thể bắt đầu xây dựng mô hình để tìm nạp từ cơ sở dữ liệu tại điểm trong ứng dụng của bạn, bắt đầu tạo các tệp xem cơ bản lấy mẫu từ ứng dụng được mã hóa đầy đủ và mã hóa chúng trong ứng dụng mới, lưu ý cấu trúc và độ sạch của mã hóa.

Hy vọng điều này sẽ giúp bạn bắt đầu di chuyển vì tôi chắc chắn không khuyên bạn tiếp tục làm việc với một ứng dụng như vậy.


@mitch

Event nghĩ bạn mảnh thứ hai của mã là sạch của nó vẫn còn kết hợp tầm nhìn của bạn với phần còn lại của ứng dụng của bạn mà nó nên được như vậy:

<html> 
    <?php $this->load("segments/head"); ?> 
    <body> 
     <?php echo $this->wrap("span",$this->link("Some Linke",$this->var("homepage"))) ?> 
    </body> 
</html> 

một tập chuyên dụng của các phương thức cho khung nhìn để ngăn chặn nó tương tác với logic chính, điều này sẽ được bọc trong một đối tượng để ngăn chặn phạm vi và chỉ đối tượng mới có thể truy cập vào logic chính.

0

Tôi không có dữ liệu thống kê để sao lưu điều này, nhưng đó là sự hiểu biết của tôi về việc tắt "php" thành HTML đầu ra hơn là sử dụng tiếng vang ""; Lý do là khi bạn chạy html của bạn thông qua các thẻ echo, bạn đang có PHP phân tích cú pháp nó ra để hiển thị, trong khi chỉ cần đặt nó trong tài liệu chính nó sẽ cho phép trình duyệt hiển thị nó mà không cần phải có PHP phân tích nó.

Khi tôi phát triển Coldfusion, tôi nhớ đã nghe cùng một trường hợp được tạo cho thẻ.

+2

Tối ưu hóa vi mô ở mức tốt nhất ... – ircmaxell

0

Tôi thích sử dụng <?php?> vì dễ đọc HTML hơn, nhưng nếu mất hiệu suất sẽ rất ít. Tôi đã viết HTML với echo nhưng rất khó đọc và tìm thấy sự cố trong HTML.