Căn bản PHP

Constain PHP

PHP có số lượng lớn các hằng số định sẵn. Bài này sẽ trình bày bảy điều quan trọng nhất, thiết thực nhất và hữu ích nhất PHP Magic Constants.

FILE - Đường dẫn đầy đủ và tên tập tin của tệp. DIR - Thư mục của tập tin. FUNCTION - Tên chức năng. CLASS - Tên lớp. METHOD - Tên phương thức của lớp. LINE - Số dòng hiện tại của tệp. NAMESPACE - Tên của không gian tên hiện tại Đây là ví dụ về PHP, cách sử dụng tất cả các PHP Constant được nhắc đến trước đó.

<?php

	// Set namespace (works only with PHP 5.3)
	namespace TestProject;

	// This prints file full path and name
	echo "This file full path and file name is '" . __FILE__ . "'.\n";

	// This prints file full path, without file name
	echo "This file full path is '" . __DIR__ . "'.\n";

	// This prints current line number on file
	echo "This is line number " . __LINE__ . ".\n";

	// Really simple basic test function
	function test_function_magic_constant() {
		echo "This is from '" . __FUNCTION__ . "' function.\n";
	}

	// Prints function and used namespace
	test_function_magic_constant();

	// Really simple class for testing magic constants
	class TestMagicConstants {
		// Prints class name
		public function printClassName() {
			echo "This is " . __CLASS__ . " class.\n";
		}

		// Prints class and method name
		public function printMethodName() {
			echo "This is " . __METHOD__ . " method.\n";
		}

		// Prints function name
		public function printFunction() {
			echo "This is function '" . __FUNCTION__ . "' inside class.\n";
		}

		// Prints namespace name (works only with PHP 5.3)
		public function printNamespace() {
			echo "Namespace name is '" . __NAMESPACE__ . "'.\n";
		}
	}

	// Create new TestMagicConstants class
	$test_magic_constants = new TestMagicConstants;

	// This prints class name and used namespace
	$test_magic_constants->printClassName();

	// This prints method name and used namespace
	$test_magic_constants->printMethodName();

	// This prints function name inside class and used namespace
	// same as method name, but without class
	$test_magic_constants->printFunction();

	// This prints namespace name (works only with PHP 5.3)
	$test_magic_constants->printNamespace();

?>

output

This file full path and file name is '/tmp/magic_constants/magic.php'.
This file full path is '/tmp/magic_constants'.
This is line number 13.
This is from 'TestProject\test_function_magic_constant' function.
This is TestProject\TestMagicConstants class.
This is TestProject\TestMagicConstants::printMethodName method.
This is function 'printFunction' inside class.
Namespace name is 'TestProject'.

Cách chuyển đổi stdClass sang Array và Array sang stdClass:

Tôi nghĩ rằng tất cả các lập trình PHP đã đến qua Array và stdClass Objects. Đôi khi nó rất hữu ích chuyển đổi các Objects sang Array và Array sang Objects. Điều này rất dễ nếu các Array và các Objects là một chiều, nhưng có thể rất khó nếu sử dụng các Array và Objects đa chiều.

Bài này định nghĩa hai hàm đệ quy cực kỳ đơn giản để chuyển đổi các Objects Đa chiều thành Array và Array đa chiều thành Objects.

Chức năng Chuyển đổi các Objects stdClass sang Array đa chiều

<?php

    function objectToArray($d) {
        if (is_object($d)) {
            // Gets the properties of the given object
            // with get_object_vars function
            $d = get_object_vars($d);
        }
		
        if (is_array($d)) {
            /*
            * Return array converted to object
            * Using __FUNCTION__ (Magic constant)
            * for recursive call
            */
            return array_map(__FUNCTION__, $d);
        }
        else {
            // Return array
            return $d;
        }
    }

Chuyển đổi các Array sang Objects stdClass

<?php

    function arrayToObject($d) {
        if (is_array($d)) {
            /*
            * Return array converted to object
            * Using __FUNCTION__ (Magic constant)
            * for recursive call
            */
            return (object) array_map(__FUNCTION__, $d);
        }
        else {
            // Return object
            return $d;
        }
    }

ví dụ:

// Create new stdClass Object
	$init = new stdClass;

	// Add some test data
	$init->foo = "Test data";
	$init->bar = new stdClass;
	$init->bar->baaz = "Testing";
	$init->bar->fooz = new stdClass;
	$init->bar->fooz->baz = "Testing again";
	$init->foox = "Just test";

	// Convert array to object and then object back to array
	$array = objectToArray($init);
	$object = arrayToObject($array);

	// Print objects and array
	print_r($init);
	echo "\n";
	print_r($array);
	echo "\n";
	print_r($object);

kết quả:

stdClass Object
(
    [foo] => Test data
    [bar] => stdClass Object
        (
            [baaz] => Testing
            [fooz] => stdClass Object
                (
                    [baz] => Testing again
                )

        )

    [foox] => Just test
)

Array
(
    [foo] => Test data
    [bar] => Array
        (
            [baaz] => Testing
            [fooz] => Array
                (
                    [baz] => Testing again
                )

        )

    [foox] => Just test
)

stdClass Object
(
    [foo] => Test data
    [bar] => stdClass Object
        (
            [baaz] => Testing
            [fooz] => stdClass Object
                (
                    [baz] => Testing again
                )

        )

    [foox] => Just test
)