Practical use of PHP extract function

Practical use of php extract function

PHP-তে extract function টি বিভিন্ন পরিস্থিতিতে ব্যবহার হতে পারে যেখানে আপনাকে Array Key গুলিকে পৃথক ভেরিয়েবলে রূপান্তর করতে হবে। যাইহোক, এটি সতর্কতার সাথে ব্যবহার করা উচিত, নিম্নোক্ত নির্দিষ্ট ব্যবহারের ক্ষেত্রে এটি উপযুক্ত হতে পারে:

১. Working with Form Data:

HTML ফর্মগুলি থেকে ডেটা প্রসেস করার সময়, আপনি $_POST বা $_GET অ্যারেগুলিকে পৃথক ভেরিয়েবলে রূপান্তর করতে extract function ব্যবহার করতে পারেন, যাতে ফর্ম ইনপুট ডেটার সাথে কাজ করা সহজ হয়৷

চলুন প্রথমে form.html নামে একটি form তৈরি করি।

<!DOCTYPE html>
<html>
<head>
    <title>Form Example</title>
</head>
<body>
    <form method="post" action="process_form.php">
        <label for="username">Username:</label>
        <input type="text" name="username" id="username"><br>

        <label for="password">Password:</label>
        <input type="password" name="password" id="password"><br>

        <input type="submit" value="Submit">
    </form>
</body>
</html>

উপরের HTML ফর্মে, আমাদের দুটি input field রয়েছে, একটি হচ্ছে “username” এবং অন্যটি হচ্ছে “password।” যখন ইউজার ফর্মটি সাবমিট দেয়, তখন HTTP POST মেথড ব্যবহার করে ডেটা “process_form.php” স্ক্রিপ্টে পাঠানো হবে।

এখন, আসুন “process_form.php” নামে একটি PHP ফাইল তৈরি করি যা ভেরিয়েবল হিসাবে form field গুলিতে অ্যাক্সেস করতে extract() ব্যবহার করে:

<?php
if ($_SERVER["REQUEST_METHOD"] === "POST") {
    // Use extract() to convert $_POST data into variables
    extract($_POST);

    // Now you can directly access form fields as variables
    echo "Username: " . $username . "<br>";
    echo "Password: " . $password . "<br>";
} else {
    echo "Form data not submitted.";
}
?>

এই “process_form.php” স্ক্রিপ্টে:

  • ফর্ম ডেটা জমা দেওয়া হয়েছে তা নিশ্চিত করতে আমরা প্রথমে $_SERVER[“REQUEST_METHOD”] ব্যবহার করে request method টি POST করা কিনা তা চেক করি।
  • আমরা $_POST superglobal array থেকে form data কে পৃথক ভেরিয়েবলে রূপান্তর করতে extract($_POST) ব্যবহার করি। extract() ব্যবহার করার পরে, আপনি ভেরিয়েবল হিসাবে সরাসরি form fields গুলি অ্যাক্সেস করতে পারেন।
  • তারপরে আমরা extract করা ভেরিয়েবলের মানগুলিকে echo করি, এই ক্ষেত্রে, “username” এবং “password”
  • আপনি যখন ফর্মটি পূরণ করেন এবং জমা দেন, তখন “process_form.php” স্ক্রিপ্ট ভেরিয়েবল হিসাবে “username” এবং “password” fields এ আপনার দেওয়া value গুলি প্রদর্শন করবে।

২. Configuration Files:

কনফিগারেশন ফাইলগুলিতে, আপনি একটি অ্যাসোসিয়েটিভ অ্যারে থেকে কনফিগারেশন সেটিংস import করতে extract function ব্যবহার করতে পারেন, এটি কনফিগারেশন value গুলি অ্যাক্সেস করা আরও সুবিধাজনক করে তোলে।

এখানে PHP-তে কনফিগারেশন ফাইলের সাথে extract() ব্যবহার করার একটি সম্পূর্ণ উদাহরণ দেওয়া হলো :

Create a Configuration File (config.php):

প্রথমে, কিছু example configuration settings সহ “config.php” নামে একটি কনফিগারেশন ফাইল তৈরি করুন:

<?php
return [
    'database_host' => 'localhost',
    'database_username' => 'your_username',
    'database_password' => 'your_password',
    'database_name' => 'your_database',
];

‘your_username’, ‘your_password’, এবং ‘your_database’ কে আপনার actual database credentials দিয়ে প্রতিস্থাপন করুন।

Create the Main PHP Script:

এখন, main PHP স্ক্রিপ্ট তৈরি করুন এবং include() ফাঙ্কশন ব্যবহার করে”config.php” থেকে কনফিগারেশন সেটিংস লোড করুন। এখন আপনি extract function ব্যবহার করে ভেরিয়েবল হিসেবে সেই সেটিংস অ্যাক্সেস করতে পারেন:

<?php
$config=include "config.php";
extract($config);

//echo $database_password;
$dbh = new PDO("mysql:host=$database_host;dbname=$database_name",$database_username,$database_password);
// use the connection here
$sth = $dbh->query('SELECT * FROM users');
$sth->execute();
$result=$sth->fetchAll(PDO::FETCH_ASSOC);
print_r($result);

// and now we're done; close it
$sth = null;
$dbh = null;
?>

Run the Script:

এবার একই ডিরেক্টরিতে “config.php” এবং main script (e.g., “main.php”) উভয়ই সংরক্ষণ করুন। তারপর, আপনার টার্মিনাল বা ওয়েব ব্রাউজার খুলুন এবং main script টি রান করুন । এটি “config.php” থেকে কনফিগারেশন সেটিংস লোড করবে এবং তাদের ভেরিয়েবল হিসেবে প্রদর্শন করবে।

৩. Templates and View Data:

templating engine এ বা web application view তে ডেটা পাস করার সময়, আপনি template বা view তে available একটি associative array থেকে ভেরিয়েবল তৈরি করতে extract() ব্যবহার করতে পারেন।

আসুন একটি ওয়েব অ্যাপ্লিকেশনে একটি view তে ডেটা পাস করার জন্য extract() ব্যবহার করার একটি বাস্তব উদাহরণ বিবেচনা করি। templating engines বা view rendering এর সাথে কাজ করার সময় এটি ওয়েব ডেভেলপমেন্টের একটি common practice.

Scenario: Building a Simple Blog Application

ধরুন আপনি PHP-তে একটি simple blog application তৈরি করছেন। আপনার একটি blog post আছে যা আপনি একটি template ব্যবহার করে প্রদর্শন করতে চান৷ টেমপ্লেটে ডেটা এভেইলেবল করতে, আপনি extract() ব্যবহার করতে পারেন।

Create a Blog Post Data Array:

প্রথমে, একটি associative array তৈরি করুন যা একটি ব্লগ পোস্টের ডেটা উপস্থাপন করে। ডেটাতে সাধারণত post title, author, content এবং publication date এর মতো ডেটা অন্তর্ভুক্ত থাকে।

$blogPost = [
    'title' => 'Creating a Blog with PHP',
    'author' => 'John Doe',
    'content' => 'In this tutorial, we will learn how to create a simple blog with PHP...',
    'published_at' => '2023-10-20',
];

Create a View Template:

এরপরে, একটি create a template file (যেমন, “blog_template.php”) যা blog post প্রদর্শনের জন্য structure এবং layout ডিফাইন করে। template টিতে এমন placeholders রয়েছে যেখানে আপনি ডেটা insert করতে চান।

<!DOCTYPE html>
<html>
<head>
    <title><?php echo $title; ?></title>
</head>
<body>
    <h1><?php echo $title; ?></h1>
    <p>By <?php echo $author; ?></p>
    <p><?php echo $content; ?></p>
    <p>Published on <?php echo $published_at; ?></p>
</body>
</html>

Render the View:

আপনার পিএইচপি স্ক্রিপ্টে, আপনি টেমপ্লেটটি লোড করতে পারেন এবং $blogPost অ্যারে থেকে ডেটা টেমপ্লেট ভেরিয়েবলে available করতে extract() ব্যবহার করতে পারেন।

<?php
// Load the blog post template
include('controller.php');

// Use extract() to make data available to the template
extract($blogPost);

include('blog_template.php');

এই ধরণের কাজে extract() ব্যবহার করে, আপনি rendering এর জন্য PHP স্ক্রিপ্ট থেকে টেমপ্লেটে ডেটা পাস করা সহজ । data এবং presentation এই separation ওয়েব ডেভেলপমেন্টের একটি fundamental principle এবং এটি আপনার কোডকে organized এবং maintainable রাখতে সাহায্য করে, বিশেষ করে বৃহত্তর ওয়েব অ্যাপ্লিকেশনগুলিতে যেখানে আপনার একাধিক views এবং data প্রদর্শন করা যায়।

৪. Localization and Internationalization:

একাধিক ভাষায় translated content নিয়ে কাজ করার সময়, আপনি আপনার templates বা code এ ভেরিয়েবল হিসাবে translated key গুলি এভেইলেবল করতে extract() ফাঙ্কশন ব্যবহার করতে পারেন।

এখানে Localization এবং Internationalization উপর একটি সম্পূর্ণ উদাহরণ দেওয়া হল যেখানে আপনি একটি নির্দিষ্ট ভাষার জন্য ভেরিয়েবল হিসাবে translation key গুলি available করতে extract() ব্যবহার করেন (এই ক্ষেত্রে “en”):

Create the Translation Data (e.g., translations.php):

প্রথমে, একটি ফাইল তৈরি করুন (যেমন, “translations.php”) যাতে English language এর translation ডেটা রয়েছে:

<?php
return [
    'hello_message' => 'Hello, world!',
    'greeting' => 'Welcome to our website.',
    'goodbye_message' => 'Goodbye!',
];

Use extract() to Make Translations Available:

এর পরে, আপনি ফাইল থেকে translation data লোড করতে পারেন এবং translation key গুলিকে ভেরিয়েবল হিসাবে এভেইলেবল করতে extract() ফাঙ্কশন ব্যবহার করতে পারেন। এবং সেই সাথে আপনি ইউজারের কাছে translated message গুলি display করতে ভেরিয়েবল হিসাবে translation key গুলি সরাসরি ব্যবহার করতে পারেন:

// Load the translation data for the English language
$translations = include('translations.php');

// Use extract() to make translation keys available as variables
extract($translations);

// Display translated messages
echo "Hello Message: $hello_message<br>";
echo "Greeting: $greeting<br>";
echo "Goodbye Message: $goodbye_message<br>";

আপনি যখন এই script টি চালাবেন, তখন এটি translation data লোড করবে, translation key গুলো থেকে ভেরিয়েবল তৈরি করতে extract() ফাঙ্কশন ব্যবহার করবে এবং তারপরে translated message গুলি প্রদর্শন করবে।

এই পদ্ধতিটি প্রায়শই multilingual web application গুলিতে ব্যবহৃত হয় যাতে দক্ষতার সাথে বিভিন্ন ভাষায় text পরিচালনা এবং প্রদর্শন করা হয়। আপনার কাছে সাধারণত প্রতিটি supported language এর জন্য একাধিক অনুবাদ ফাইল থাকবে এবং ইউজারের language preference এর উপর ভিত্তি করে উপযুক্ত translation ফাইল ব্যবহার করবেন।

৫. Custom Function with Multiple Return Values:

আপনার যদি একটি কাস্টম ফাংশন থাকে যা একটি associative array হিসাবে একাধিক মান রিটার্ন করে, আপনি আরও প্রসেসের জন্য পৃথক ভেরিয়েবলগুলিতে রিটার্নকৃত মানগুলি বরাদ্দ করতে extract() ব্যবহার করতে পারেন।

function getPersonInfo() {
    return ["name" => "Alice", "age" => 25, "city" => "New York"];
}

extract(getPersonInfo());
// Now you can use $name, $age, and $city.

৬. Legacy Code Integration:

কিছু ক্ষেত্রে, আপনি লিগ্যাসি কোড বা তৃতীয় পক্ষের লাইব্রেরির সম্মুখীন হতে পারেন যা extract() ব্যবহার করে। আপনি যদি এই ধরনের কোডের সাথে কাজ করতে চান, তাহলে আপনাকে তাদের variable naming conventions মেনে চলতে extract() ব্যবহার করতে হতে পারে।

আসুন একটি বাস্তব-বিশ্বের উদাহরণ বিবেচনা করা যাক , যেখানে আপনাকে একটি legacy codebase integrate করতে হবে যা extract() ব্যবহার করে। ধরুন আপনার কাছে একটি পুরানো ই-কমার্স সিস্টেম রয়েছে যা পণ্য ডেটা পরিচালনা করতে extract() ব্যবহার করে এবং আপনি বিদ্যমান কোডের সাথে maintaining compatibility রেখে এর উপরে একটি new feature তৈরি করতে চান।

Scenario: একটি বিদ্যমান ই-কমার্স সিস্টেমে একটি New Feature যোগ করা।

এই উদাহরণে, আমরা একটি লিগ্যাসি ই-কমার্স ওয়েবসাইটে একটি product comparison tool প্রদর্শন করার জন্য একটি new feature তৈরি করব৷

Legacy Code (legacy_cart.php):

বিদ্যমান ই-কমার্স কোডবেস (legacy_cart.php) প্রোডাক্ট ডেটা পরিচালনা করতে extract() ব্যবহার করে। এটি প্রোডাক্ট গুলিকে ডিফাইন করে এবং প্রতিটি প্রোডাক্টের জন্য ভেরিয়েবল তৈরি করতে extract() ব্যবহার করে।

<?php
$product1 = ['name' => 'Product A', 'price' => 29.99];
$product2 = ['name' => 'Product B', 'price' => 19.99];
$product3 = ['name' => 'Product C', 'price' => 24.99];
// More product data and extract() calls...

New Feature (product_comparison.php):

এখন আমরা ওয়েবসাইটে একটি product comparison tool যোগ করতে চাই, যেখানে ইউজাররা তুলনা করার জন্য প্রোডাক্ট নির্বাচন করতে পারেন। আমাদের new feature ফাইলে (product_comparison.php), আমাদেরকে প্রোডাক্টের ডেটা রিট্রিভ করতে হবে এবং আপনার comparison tool এর পাশাপাশি এটি প্রদর্শন করতে হবে।

<?php
include('legacy_cart.php');  // Include the legacy code

// New feature code
$selectedProducts = [1, 3];  // Simulate user-selected products

// Retrieve product data from the legacy code using extract()
foreach ($selectedProducts as $productId) {
    include('legacy_cart.php');  // Include the legacy code
    extract(${"product$productId"});  // Use extract() to access product data
    
    // Display the product data
    echo "Product Name: $name, Price: $$price<br>";
}

// New feature: Display the product comparison tool
echo "Product Comparison Tool:";
// Include the comparison tool code here...

এই উদাহরণে:

  • লিগ্যাসি কোডে (legacy_cart.php) extract() function দিয়ে তৈরি ভেরিয়েবলে প্রোডাক্ট ডেটা থাকে।
  • নতুন ফীচার (product_comparison.php), আমাদেরকে সিলেক্টেড প্রোডাক্টের জন্য প্রোডাক্ট ডেটা রিট্রিভ করতে লিগ্যাসি কোডের সাথে একীভূত করতে হবে। আমরা লিগ্যাসি কোড include করি এবং লিগ্যাসি কোডে ব্যবহৃত variable naming conventions অনুসারে প্রোডাক্ট ডেটা অ্যাক্সেস করতে extract() ফাঙ্কশন ব্যবহার করি ।
  • তারপরে আমরা প্রোডাক্ট ডেটা প্রদর্শন করব এবং বিদ্যমান ই-কমার্স ফাঙ্কশনালিটির পাশাপাশি আপনার new feature (product comparison tool) যোগ করি।

এই দৃশ্যটি ব্যাখ্যা করে যে আপনি কীভাবে লিগ্যাসি কোডের মুখোমুখি হতে পারেন যা extract() ব্যবহার করে এবং একটি বিদ্যমান অ্যাপ্লিকেশনে নতুন ফীচার গুলিকে প্রসারিত বা সংহত করতে এটির সাথে কাজ করতে হবে৷ যদিও আরও আধুনিক অনুশীলনগুলি ব্যবহার করার জন্য এই জাতীয় লিগ্যাসি কোড রিফ্যাক্টর করা প্রায়শই ভাল, কখনও কখনও, ব্যবহারিক কারণে, আপনাকে এটির সাথে ইন্টারফেস করতে extract() ব্যবহার করতে হবে।

আপনার Comparison Tool টি হবে নিম্নরুপঃ

<!-- Product Comparison Tool -->
<div class="product-comparison">
    <h2>Product Comparison</h2>
    <table>
        <tr>
            <th>Feature</th>
            <?php foreach ($selectedProducts as $productId): ?>
                <th><?php echo "Product $productId"; ?></th>
            <?php endforeach; ?>
        </tr>
        <tr>
            <td>Price</td>
            <?php foreach ($selectedProducts as $productId): ?>
                <td><?php echo "$$price"; ?></td>
            <?php endforeach; ?>
        </tr>
        <tr>
            <td>Availability</td>
            <?php foreach ($selectedProducts as $productId): ?>
                <td><?php echo "In Stock"; ?></td>
            <?php endforeach; ?>
        </tr>
        <!-- Add more product features or specifications here -->
    </table>
</div>

এই উদাহরণটি সিলেক্টেড প্রোডাক্ট গুলির জন্য একটি simple product comparison table তৈরি করে। এটি অনুমান করে যে আপনার কাছে পূর্ববর্তী প্রতিক্রিয়াতে বর্ণিত পণ্য ডেটা এভেইলেবল রয়েছে এবং টেবিলটি পূরণ করতে extract() ব্যবহার করে পণ্য ডেটা রিট্রিভ করে৷

এখানে কিভাবে এটা কাজ করে:

  • টেবিলে প্রতিটি সেলেটেড প্রোডাক্টের জন্য কলাম রয়েছে এবং row গুলি বিভিন্ন ফীচার বা স্পেসিফিকেশন উপস্থাপন করে।
  • প্রতিটি প্রোডাক্টের জন্য, এটি একটি উদাহরণ হিসাবে দাম এবং প্রাপ্যতা প্রদর্শন করে, তবে আপনি প্রয়োজন অনুসারে আরও ফীচার বা স্পেসিফিকেশন যোগ করতে পারেন।
  • লুপটি সিলেক্টেড প্রোডাক্ট গুলির মাধ্যমে ইটারেট করে এবং প্রতিটি ইটারেটের মধ্যে, এটি extract function ব্যবহার করে সংশ্লিষ্ট প্রোডাক্টের জন্য প্রোডাক্ট ডেটা রিট্রিভ করে এবং টেবিলে প্রদর্শন করে।
  • product comparison tool টি আপনার ই-কমার্স প্রোডাক্টের নির্দিষ্ট ফীচার বা স্পেসিফিকেশন মিটমাট করার জন্য কাস্টমাইজ করা যেতে পারে।

আপনি আপনার “product_comparison.php” ফাইলে এই product comparison tool কোডটি include করতে পারেন এবং এটি লিগ্যাসি কোড এবং আপনার new feature এর সাথে কাজ করবে৷

extract() ফাঙ্কশন টি খুবই সতর্কতার সাথে ব্যবহার করা গুরুত্বপূর্ণ, এবং variable naming conflicts এবং নিরাপত্তার প্রভাবের সাথে সম্পর্কিত সম্ভাব্য পার্শ্বপ্রতিক্রিয়া এবং ঝুঁকি বিবেচনা করা উচিত । extract ফাঙ্কশন ব্যবহার করার সময়, নিশ্চিত করুন যে আপনি ডেটার সৌর্সকে বিশ্বাস করেন এবং variable names গুলি আপনার কোডে বিদ্যমান ভেরিয়েবলের সাথে সাঙ্গরসিক যেন না হয়। উপরন্তু, array_key_exists() বা isset() ব্যবহার করার আগে ভেরিয়েবলের অস্তিত্ব পরীক্ষা করার জন্য ব্যবহার করতে পারেন , বিশেষ করে এমন ক্ষেত্রে যেখানে ডেটার উৎপত্তি সম্পূর্ণরূপে বিশ্বাসযোগ্য নয়।

আমি মাসুদ আলম, বাংলাদেশের ৩৬ তম Zend Certified Engineer । ২০০৯ সালে কম্পিউটার সাইন্স থেকে বেচেলর ডিগ্রী অর্জন করি। দীর্ঘ ১৫ বছর আমি Winux Soft, SSL Wireless, IBCS-PRIMAX, Max Group, Canadian International Development Agency (CIDA), Care Bangladesh, World Vision, Hellen Keller, Amarbebsha Ltd সহ বিভিন্ন দেশি বিদেশী কোম্পানিতে ডেটা সাইন্স, মেশিন লার্নিং, বিগ ডেটা, ওয়েব ডেভেলপমেন্ট এবং সফটওয়্যার ডেভেলপমেন্ট এর উপর বিভিন্ন লিডিং পজিশন এ চাকরি এবং প্রজেক্ট লিড করি। এছাড়াও বাংলাদেশের ১৮৫ জন জেন্ড সার্টিফাইড ইঞ্জিনিয়ার এর মধ্যে ১২০ এরও অধিক ছাত্র আমার হাতে জেন্ড সার্টিফাইড ইঞ্জিনিয়ার হয়েছেন। বর্তমানে w3programmers ট্রেনিং ইনস্টিটিউট এ PHP এর উপর Professional এবং Advance Zend Certified PHP -8.2 Engineering, Laravel Mastering Course with ReactJS, Python Beginning To Advance with Blockchain, Machine Learning and Data Science, Professional WordPress Plugin Development Beginning to Advance কোর্স করাই। আর অবসর সময়ে w3programmers.com এ ওয়েব টেকনোলজি নিয়ে লেখালেখি করি।

Leave a Reply