ฉันจะข้ามอาร์กิวเมนต์ที่เป็นทางเลือกในการเรียกใช้ฟังก์ชันได้อย่างไร


96

ตกลงฉันลืมวิธีข้ามอาร์กิวเมนต์ใน PHP ไปโดยสิ้นเชิง

บอกว่าฉันมี:

function getData($name, $limit = '50', $page = '1') {
    ...
}

ฉันจะเรียกฟังก์ชันนี้อย่างไรเพื่อให้พารามิเตอร์กลางรับค่าเริ่มต้น (เช่น '50')

getData('some name', '', '23');

ข้างต้นจะถูกต้องหรือไม่? ดูเหมือนจะไม่สามารถใช้งานได้


1
@ เชยหาอะไรกันแน่? เช่นเดียวกับวิธีแก้ปัญหาหรือชั้นเรียนเพื่อใช้สิ่งนี้หรือ ... ?
Rizier123

@ Rizier123 ฉันขอดูว่า PHP เวอร์ชันปัจจุบันรองรับการข้ามอาร์กิวเมนต์หรือไม่ (เหมือนภาษาอื่น ๆ ) คำตอบในปัจจุบันอาจล้าสมัย จากคำอธิบายของรางวัล: "คำตอบปัจจุบันมีอายุ 5 ปี PHP เวอร์ชันปัจจุบันมีการเปลี่ยนแปลงหรือไม่"
Chuck Le Butt

1
@ ชัคแล้วคำตอบอาจจะเป็น: ไม่มีอะไรเปลี่ยนแปลง; หากไม่มีวิธีแก้ปัญหา / รหัสคุณจะไม่ได้รับฟังก์ชันการทำงานของคุณ
Rizier123

คำตอบทั้งหมดที่นี่ดูเหมือนว่าคุณสามารถควบคุมฟังก์ชันที่เรียกได้ ถ้าฟังก์ชันนั้นเป็นส่วนหนึ่งของไลบรารีหรือเฟรมเวิร์กคุณไม่มีตัวเลือก แต่ต้องระบุบางอย่างสำหรับอาร์กิวเมนต์ 2 หากคุณต้องการอาร์กิวเมนต์ 3 ตัวเลือกเดียวคือค้นหาในซอร์สสำหรับฟังก์ชันและจำลองค่าดีฟอลต์
Snapey

มันเป็นไปไม่ได้ที่จะข้ามมัน ReflectionFunctionแต่คุณสามารถส่งผ่านอาร์กิวเมนต์เริ่มต้นใช้ ฉันโพสต์คำตอบนั้นในคำถามที่คล้ายกัน
เดวิด

คำตอบ:


56

โพสต์ของคุณถูกต้อง

ขออภัยหากคุณจำเป็นต้องใช้พารามิเตอร์ทางเลือกที่ส่วนท้ายสุดของรายการพารามิเตอร์คุณต้องระบุทุกอย่างจนถึงพารามิเตอร์สุดท้ายนั้น โดยทั่วไปหากคุณต้องการผสมและจับคู่คุณให้ค่าเริ่มต้นเป็น''หรือnullและอย่าใช้ภายในฟังก์ชันหากเป็นค่าเริ่มต้นนั้น


1
คุณสามารถให้ตัวอย่างได้หรือไม่?
ฉันคือฉัน

2
@iamme ทำ$limit = is_numeric($limit) ? $limit : '50';ที่จุดเริ่มต้นของฟังก์ชันgetData
Kamafeather

41

ไม่มีทางที่จะ "ข้าม" ข้อโต้แย้งอื่น ๆ กว่าจะระบุค่าเริ่มต้นที่ไม่เหมือนใครเป็นหรือfalsenull

เนื่องจาก PHP ไม่มีน้ำตาลไวยากรณ์เมื่อพูดถึงเรื่องนี้คุณมักจะเห็นสิ่งนี้:

checkbox_field(array(
    'name' => 'some name',
    ....
));

ซึ่งตามที่กล่าวอย่างชัดเจนในความคิดเห็นคือการใช้อาร์เรย์เพื่อเลียนแบบอาร์กิวเมนต์ที่ตั้งชื่อ

สิ่งนี้ให้ความยืดหยุ่นสูงสุด แต่อาจไม่จำเป็นในบางกรณี อย่างน้อยที่สุดคุณสามารถย้ายสิ่งที่คุณคิดว่าไม่คาดคิดได้เกือบตลอดเวลาไปยังจุดสิ้นสุดของรายการอาร์กิวเมนต์


2
ฉันจะระบุ 'บางอย่างเช่นนี้' เป็น 'การใช้อาร์เรย์เพื่อจำลองอาร์กิวเมนต์ที่มีชื่อ', FWIW :)
อลวน

3
แม้จะมีความยืดหยุ่นมากกว่าคุณก็ต้องจำพารามิเตอร์ที่คุณควร / ตั้งได้ (เนื่องจากไม่ได้อยู่ในลายเซ็น) ดังนั้นในที่สุดมันอาจไม่มีประโยชน์เท่าที่ควร แต่แน่นอนว่ามันขึ้นอยู่กับบริบท
Felix Kling

แล้วแนวทางปฏิบัติที่ดีที่สุดสำหรับสถานการณ์ดังกล่าวคืออะไร?
Adam Grant

39

ไม่เป็นไปไม่ได้ที่จะข้ามข้อโต้แย้งด้วยวิธีนี้ คุณสามารถละเว้นการส่งผ่านอาร์กิวเมนต์ได้เฉพาะในกรณีที่อาร์กิวเมนต์อยู่ท้ายรายการพารามิเตอร์

มีข้อเสนออย่างเป็นทางการสำหรับสิ่งนี้: https://wiki.php.net/rfc/skipparamsซึ่งถูกปฏิเสธ หน้าข้อเสนอเชื่อมโยงไปยังคำถาม SO อื่น ๆ ในหัวข้อนี้


แล้วฟังก์ชัน PHP มีตัวเลือกพารามิเตอร์มาก / น้อยได้อย่างไร?
ฉันคือฉัน

2
PHP รองรับค่าพารามิเตอร์เริ่มต้น แต่พารามิเตอร์เหล่านั้นจะต้องอยู่ท้ายรายการ
Cristik

1
คุณสามารถดูตัวอย่างได้ในเอกสาร PHP
Cristik

2
กระตุก ทำให้ฉันคลั่งมาก หากคุณไม่ชอบฟีเจอร์ที่คนอื่นร้องขอก็อย่าใช้มัน อินเทอร์เน็ตแย่ที่สุดในบางครั้ง
Lee Saxon

@LeeSaxon ปัญหาคือความสามารถในการอ่านและการพกพา 1) หากมีใครบางคนตัดสินใจที่จะข้ามพารามิเตอร์และมีคนที่โค้ดดีบักพลาดข้อเท็จจริงนี้จะเกิดความสับสนอย่างมาก 2) รหัสใหม่ไม่สามารถใช้งานได้กับเวอร์ชันเก่าหากไม่มีการลากผ่านหลักและโอกาสที่จะผิดพลาดจะสูงมาก
Mark Walsh

6

ไม่มีอะไรเปลี่ยนแปลงเกี่ยวกับความสามารถในการข้ามอาร์กิวเมนต์ที่เป็นทางเลือกอย่างไรก็ตามสำหรับไวยากรณ์ที่ถูกต้องและเพื่อให้สามารถระบุ NULL สำหรับอาร์กิวเมนต์ที่ฉันต้องการข้ามนี่คือวิธีที่ฉันจะทำ:

define('DEFAULT_DATA_LIMIT', '50');
define('DEFAULT_DATA_PAGE', '1');

/**
 * getData
 * get a page of data 
 *
 * Parameters:
 *     name - (required) the name of data to obtain
 *     limit - (optional) send NULL to get the default limit: 50
 *     page - (optional) send NULL to get the default page: 1
 * Returns:
 *     a page of data as an array
 */

function getData($name, $limit = NULL, $page = NULL) {
    $limit = ($limit===NULL) ? DEFAULT_DATA_LIMIT : $limit;
    $page = ($page===NULL) ? DEFAULT_DATA_PAGE : $page;
    ...
}

สิ่งนี้สามารถเรียกได้ด้วยเหตุนี้: getData('some name',NULL,'23');และใครก็ตามที่เรียกใช้ฟังก์ชันในอนาคตไม่จำเป็นต้องจำค่าเริ่มต้นทุกครั้งหรือค่าคงที่ที่ประกาศไว้สำหรับพวกเขา


1
คุณอาจต้องการการเปรียบเทียบที่เข้มงวด ($ limit === null)
roelleor

4

คำตอบง่ายๆคือไม่มี แต่ทำไมต้องข้ามไปเมื่อการจัดเรียงอาร์กิวเมนต์ใหม่ทำได้สำเร็จ?

ของคุณคือ " การใช้อาร์กิวเมนต์ของฟังก์ชันเริ่มต้นไม่ถูกต้อง " และจะไม่ทำงานตามที่คุณคาดหวังไว้

หมายเหตุด้านข้างจากเอกสาร PHP:

เมื่อใช้อาร์กิวเมนต์เริ่มต้นค่าเริ่มต้นใด ๆ ควรอยู่ทางด้านขวาของอาร์กิวเมนต์ที่ไม่ใช่ค่าเริ่มต้น มิฉะนั้นสิ่งต่างๆจะไม่เป็นไปตามที่คาดไว้

พิจารณาสิ่งต่อไปนี้:

function getData($name, $limit = '50', $page = '1') {
    return "Select * FROM books WHERE name = $name AND page = $page limit $limit";
}

echo getData('some name', '', '23');   // won't work as expected

ผลลัพธ์จะเป็น:

"Select * FROM books WHERE name = some name AND page = 23 limit"

การใช้อาร์กิวเมนต์ของฟังก์ชันเริ่มต้นอย่างถูกต้องควรเป็นดังนี้:

function getData($name, $page = '1', $limit = '50') {
    return "Select * FROM books WHERE name = $name AND page = $page limit $limit";
}

echo getData('some name', '23');  // works as expected

ผลลัพธ์จะเป็น:

"Select * FROM books WHERE name = some name AND page = 23 limit 50"

การใส่ค่าเริ่มต้นให้ถูกต้องหลังจากค่าที่ไม่ใช่ค่าเริ่มต้นทำให้แน่ใจว่าค่าเริ่มต้นจะเรียกใช้ค่าเริ่มต้นสำหรับตัวแปรนั้นเสมอหากไม่ได้กำหนด / กำหนดไว้นี่คือลิงก์สำหรับอ้างอิงและที่มาของตัวอย่างเหล่านั้น

แก้ไข: การตั้งค่าnullเป็นตามที่คนอื่นแนะนำอาจได้ผลและเป็นอีกทางเลือกหนึ่ง แต่อาจไม่เหมาะกับสิ่งที่คุณต้องการ มันจะตั้งค่าเริ่มต้นเป็น null เสมอหากไม่ได้กำหนดไว้


นี่เป็นคำตอบที่ดีที่สุดเนื่องจากมีคำอธิบายเชิงวาทกรรมที่แสดงไว้อย่างชัดเจน! ขอขอบคุณ!
Christian

2

สำหรับพารามิเตอร์ใด ๆ ที่ข้ามไป (คุณต้อง) ไปกับพารามิเตอร์เริ่มต้นเพื่อให้อยู่ในด้านที่ปลอดภัย

(การตั้งค่า null โดยที่พารามิเตอร์เริ่มต้นคือ '' หรือคล้ายกันหรือในทางกลับกันจะทำให้คุณมีปัญหา w ... )


2

ดังที่ได้กล่าวมาแล้วคุณจะไม่สามารถข้ามพารามิเตอร์ได้ ฉันได้เขียนคำตอบนี้เพื่อระบุภาคผนวกซึ่งมีขนาดใหญ่เกินกว่าที่จะใส่ความคิดเห็นได้

@ Frank Nocke เสนอให้เรียกใช้ฟังก์ชันด้วยพารามิเตอร์เริ่มต้นตัวอย่างเช่นมีไฟล์

function a($b=0, $c=NULL, $d=''){ //...

คุณควรใช้

$var = a(0, NULL, 'ddd'); 

ซึ่งจะทำงานเหมือนกับการละเว้นพารามิเตอร์สองตัวแรก ( $bและ$c)

ไม่ชัดเจนว่าค่าใดเป็นค่าเริ่มต้น ( 0พิมพ์เพื่อระบุค่าเริ่มต้นหรือว่าสำคัญ?)

นอกจากนี้ยังมีอันตรายที่ปัญหาค่าเริ่มต้นเชื่อมต่อกับฟังก์ชันภายนอก (หรือในตัว) เมื่อค่าเริ่มต้นสามารถเปลี่ยนแปลงได้โดยผู้เขียนฟังก์ชัน (หรือวิธีการ) ดังนั้นหากคุณไม่เปลี่ยนการโทรของคุณในโปรแกรมคุณสามารถเปลี่ยนพฤติกรรมของมันได้โดยไม่ได้ตั้งใจ

วิธีแก้ปัญหาบางอย่างอาจเป็นการกำหนดค่าคงที่ส่วนกลางบางค่าDEFAULT_A_Bซึ่งจะเป็น "ค่าเริ่มต้นของพารามิเตอร์ B ของฟังก์ชัน A" และ "ละเว้น" ด้วยวิธีนี้:

$var = a(DEFAULT_A_B, DEFAULT_A_C, 'ddd');

สำหรับคลาสจะง่ายกว่าและสวยงามกว่าถ้าคุณกำหนดค่าคงที่ของคลาสเนื่องจากเป็นส่วนหนึ่งของขอบเขตทั่วโลกเช่น

class MyObjectClass {
  const DEFAULT_A_B = 0;

  function a($b = self::DEFAULT_A_B){
    // method body
  }
} 
$obj = new MyObjectClass();
$var = $obj->a(MyObjectClass::DEFAULT_A_B); //etc.

โปรดทราบว่าค่าคงที่เริ่มต้นนี้ถูกกำหนดเพียงครั้งเดียวตลอดทั้งโค้ด (ไม่มีค่าแม้แต่ในการประกาศวิธีการ) ดังนั้นในกรณีที่มีการเปลี่ยนแปลงที่ไม่คาดคิดคุณจะต้องระบุฟังก์ชัน / วิธีการด้วยค่าเริ่มต้นที่ถูกต้องเสมอ

ความชัดเจนของการแก้ปัญหานี้เป็นหลักสูตรที่ดีกว่าการจัดหาวัตถุดิบค่าเริ่มต้น (เช่นNULL, 0ฯลฯ ) ซึ่งบอกเล่าอะไรให้ผู้อ่าน

(ฉันยอมรับว่าการเรียกไลค์$var = a(,,'ddd');จะเป็นตัวเลือกที่ดีที่สุด)


2

คุณไม่สามารถข้ามอาร์กิวเมนต์ได้ แต่คุณสามารถใช้พารามิเตอร์อาร์เรย์ได้และคุณต้องกำหนดเพียง 1 พารามิเตอร์ซึ่งเป็นอาร์เรย์ของพารามิเตอร์

function myfunction($array_param)
{
    echo $array_param['name'];
    echo $array_param['age'];
    .............
}

และคุณสามารถเพิ่มพารามิเตอร์ได้มากเท่าที่ต้องการโดยไม่จำเป็นต้องกำหนดพารามิเตอร์เหล่านี้ เมื่อคุณเรียกใช้ฟังก์ชันคุณใส่พารามิเตอร์ของคุณดังนี้:

myfunction(array("name" => "Bob","age" => "18", .........));

1

นี่เป็นคำถามเก่าที่มีคำตอบที่มีความสามารถทางเทคนิคหลายประการ แต่มันเป็นหนึ่งในรูปแบบการออกแบบที่ทันสมัยใน PHP: Object-Oriented Programming แทนที่จะฉีดชุดข้อมูลประเภทสเกลาร์ดั้งเดิมให้พิจารณาใช้ "injection-object" ที่มีข้อมูลทั้งหมดที่ฟังก์ชันต้องการ http://php.net/manual/th/language.types.intro.php

วัตถุที่ฉีดเข้าไปอาจมีรูทีนการตรวจสอบคุณสมบัติเป็นต้นหากการสร้างอินสแตนซ์และการแทรกข้อมูลลงในวัตถุที่ฉีดเข้าไปไม่สามารถผ่านการตรวจสอบความถูกต้องทั้งหมดได้รหัสจะส่งข้อยกเว้นทันทีและแอปพลิเคชันสามารถหลีกเลี่ยงกระบวนการจัดการที่น่าอึดอัด ด้วยข้อมูลที่อาจไม่สมบูรณ์

เราสามารถพิมพ์คำใบ้วัตถุแทรกเพื่อตรวจจับข้อผิดพลาดก่อนการปรับใช้ แนวคิดบางส่วนสรุปไว้ในบทความนี้เมื่อไม่กี่ปีที่ผ่านมา

https://www.experts-exchange.com/articles/18409/Using-Named-Parameters-in-PHP-Function-Calls.html


0

อย่างที่คนอื่น ๆ พูดไปแล้วว่าสิ่งที่คุณต้องการจะเป็นไปไม่ได้ใน PHP โดยไม่ต้องเพิ่มบรรทัดรหัสใด ๆ ในฟังก์ชัน

แต่คุณสามารถวางโค้ดนี้ไว้ที่ด้านบนสุดของฟังก์ชันเพื่อรับฟังก์ชันของคุณ:

foreach((new ReflectionFunction(debug_backtrace()[0]["function"]))->getParameters() as $param) {
    if(empty(${$param->getName()}) && $param->isOptional())
        ${$param->getName()} = $param->getDefaultValue();
}

โดยพื้นฐานแล้วdebug_backtrace()ฉันได้ชื่อฟังก์ชันที่วางโค้ดนี้เพื่อสร้างReflectionFunctionวัตถุใหม่และวนซ้ำแม้ว่าอาร์กิวเมนต์ของฟังก์ชันทั้งหมด

ในลูปฉันเพียงตรวจสอบว่าอาร์กิวเมนต์ของฟังก์ชันเป็นempty()และอาร์กิวเมนต์เป็น "ทางเลือก" (หมายความว่ามีค่าเริ่มต้น) ถ้าใช่ฉันแค่กำหนดค่าเริ่มต้นให้กับอาร์กิวเมนต์

Demo


0

ตั้งค่าขีด จำกัด เป็น null

function getData($name, $limit = null, $page = '1') {
    ...
}

และเรียกใช้ฟังก์ชันนั้น

getData('some name', null, '23');

หากคุณต้องการกำหนดขีด จำกัด ที่คุณสามารถส่งผ่านเป็นอาร์กิวเมนต์

getData('some name', 50, '23');

0

ตามคำแนะนำก่อนหน้านี้ไม่มีอะไรเปลี่ยนแปลง อย่างไรก็ตามระวังพารามิเตอร์มากเกินไป (โดยเฉพาะพารามิเตอร์ที่เป็นทางเลือก) เป็นตัวบ่งชี้กลิ่นรหัสที่รุนแรง

บางทีฟังก์ชั่นของคุณทำงานมากเกินไป:

// first build context
$dataFetcher->setPage(1);
// $dataFetcher->setPageSize(50); // not used here
// then do the job
$dataFetcher->getData('some name');

พารามิเตอร์บางตัวสามารถจัดกลุ่มได้อย่างมีเหตุผล:

$pagination = new Pagination(1 /*, 50*/);
getData('some name', $pagination);
// Java coders will probably be familiar with this form:
getData('some name', new Pagination(1));

ประการสุดท้ายคุณสามารถแนะนำออบเจ็กต์พารามิเตอร์เฉพาะกิจได้เสมอ:

$param = new GetDataParameter();
$param->setPage(1);
// $param->setPageSize(50); // not used here
getData($param);

(ซึ่งเป็นเพียงเวอร์ชันที่ได้รับการยกย่องของเทคนิคอาร์เรย์พารามิเตอร์ที่เป็นทางการน้อยกว่า)

บางครั้งเหตุผลที่ทำให้พารามิเตอร์เป็นทางเลือกนั้นไม่ถูกต้อง ในตัวอย่างนี้$pageตั้งใจให้เป็นทางเลือกหรือไม่? การบันทึกตัวละครสองตัวสร้างความแตกต่างได้จริงหรือ?

// dubious
// it is not obvious at first sight that a parameterless call to "getData()"
// returns only one page of data
function getData($page = 1);

// this makes more sense
function log($message, $timestamp = null /* current time by default */);

0

ตัวอย่างนี้:

    ฟังก์ชัน getData ($ name, $ options) {
       $ default = array (
            'limit' => 50,
            'page' => 2,
        );
        $ args = array_merge ($ default, $ options);
        print_r ($ args);
    }

    getData ('foo', อาร์เรย์ ());
    getData ('foo', อาร์เรย์ ('จำกัด ' => 2));
    getData ('foo', อาร์เรย์ ('จำกัด ' => 10, 'หน้า' => 10));

คำตอบคือ:

     อาร์เรย์
    (
        [ขีด จำกัด ] => 50
        [หน้า] => 2
    )
    อาร์เรย์
    (
        [ขีด จำกัด ] => 2
        [หน้า] => 2
    )
    อาร์เรย์
    (
        [ขีด จำกัด ] => 10
        [หน้า] => 10
    )


2
ดี. แต่คำอธิบายเล็กน้อยจะเป็นประโยชน์
ฉาย

คำตอบที่ดี แต่ถ้าคุณต้องการ ommit พารามิเตอร์ที่เป็นทางเลือกให้ทำดังนี้: function getData ($ name, $ args = array ()) {$ defaults = array ('limit': => 50, 'page' => 2) ; $ args = array_merge (ค่าเริ่มต้น $, $ args); } ตอนนี้คุณสามารถเรียกใช้ฟังก์ชันนี้ด้วยพารามิเตอร์แรกเท่านั้นเช่น getData ('foo');
EchoSin

0

นี่คือสิ่งที่ฉันจะทำ:

<?php

    function getData($name, $limit = '', $page = '1') {
            $limit = (EMPTY($limit)) ? 50 : $limit;
            $output = "name=$name&limit=$limit&page=$page";
            return $output;
    }

     echo getData('table');

    /* output name=table&limit=50&page=1 */

     echo getData('table',20);

    /* name=table&limit=20&page=1 */

    echo getData('table','',5);

    /* output name=table&limit=50&page=5 */

    function getData2($name, $limit = NULL, $page = '1') {
            $limit = (ISSET($limit)) ? $limit : 50;
            $output = "name=$name&limit=$limit&page=$page";
            return $output;
    }

    echo getData2('table');

    // /* output name=table&limit=50&page=1 */

    echo getData2('table',20);

    /* output name=table&limit=20&page=1 */

    echo getData2('table',NULL,3);

    /* output name=table&limit=50&page=3 */

?>

หวังว่านี่จะช่วยใครบางคนได้


0

ฉันต้องสร้างโรงงานด้วยพารามิเตอร์ที่เป็นทางเลือกวิธีแก้ปัญหาของฉันคือใช้ตัวดำเนินการเชื่อมต่อแบบ null:

public static function make(
    string $first_name = null,
    string $last_name = null,
    string $email = null,
    string $subject = null,
    string $message = null
) {
    $first_name = $first_name ?? 'First';
    $last_name  = $last_name ?? 'Last';
    $email      = $email ?? 'foo@bar.com';
    $subject    = $subject ?? 'Some subject';
    $message    = $message ?? 'Some message';
}

การใช้งาน:

$factory1 = Factory::make('First Name Override');
$factory2 = Factory::make(null, 'Last Name Override');
$factory3 = Factory::make(null, null, null, null 'Message Override');

ไม่ใช่สิ่งที่สวยที่สุด แต่อาจเป็นรูปแบบที่ดีที่จะใช้ในโรงงานสำหรับการทดสอบ



-1

คุณไม่สามารถข้ามพารามิเตอร์กลางในการเรียกฟังก์ชันของคุณ แต่คุณสามารถหลีกเลี่ยงสิ่งนี้:

function_call('1', '2', '3'); // Pass with parameter.
function_call('1', null, '3'); // Pass without parameter.

ฟังก์ชัน:

function function_call($a, $b='50', $c){
    if(isset($b)){
        echo $b;
    }
    else{
        echo '50';
    }
}

ฉันไม่แน่ใจว่าเหตุใดคุณจึงลดคะแนนลงนอกจาก $ c ยังต้องการค่าเริ่มต้น (คุณไม่สามารถมีอาร์กิวเมนต์ที่จำเป็นหลังจากอาร์กิวเมนต์ที่เป็นทางเลือกได้)
Frank Forte

-2

ตามที่ @IbrahimLawal ชี้ให้เห็น แนวทางปฏิบัติที่ดีที่สุดคือตั้งnullค่าเป็นค่า เพียงตรวจสอบว่าค่าที่ส่งผ่านนั้นnullคุณใช้ค่าเริ่มต้นที่กำหนดไว้หรือไม่

<?php
define('DEFAULT_LIMIT', 50);
define('DEFAULT_PAGE', 1);

function getData($name, $limit = null, $page = null) {
    $limit = is_null($limit) ? DEFAULT_LIMIT : $limit;
    $page = is_null($page) ? DEFAULT_PAGE : $page;
    ...
}
?>

หวังว่านี่จะช่วยได้


คุณเพียงแค่ทำซ้ำการตอบกลับ แต่คุณสามารถเพิ่มคะแนนหรือแสดงความคิดเห็นได้
Ibrahim Lawal

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.