Req #77776 [Dup]: if inline goto

From: Date: Thu, 21 Mar 2019 22:38:12 +0000
Subject: Req #77776 [Dup]: if inline goto
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-220117@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=77776&edit=1 ID: 77776 Updated by: requinix@php.net Reported by: xxalfa at gmail dot com Summary: if inline goto Status: Duplicate Type: Feature/Change Request Package: *General Issues PHP Version: Irrelevant Block user comment: N Private report: N New Comment: If you want to continue the RFC process on your other request, read the How To you were linked that tells you exactly what you need to do. If you need an explanation of the difference between a statement and an expression, try StackOverflow. Previous Comments: ------------------------------------------------------------------------ [2019-03-21 22:35:10] requinix@php.net Duplicate of request #72589. ------------------------------------------------------------------------ [2019-03-21 06:07:26] xxalfa at gmail dot com That's right, with "foreach" and "return" it makes no sense. "require_once" returns a 0 or 1. Why does not "goto" do the same? Can I jump = 1, I can not jump = 0. ------------------------------------------------------------------------ [2019-03-21 03:18:46] requinix@php.net For the same reason you can't do it with a foreach or return: they are statements, not expressions. ------------------------------------------------------------------------ [2019-03-21 03:11:21] xxalfa at gmail dot com Description: ------------ I don't understand why "goto" is not treated like "require_once"? Test script: --------------- <?php //------------------------------------------------- // HEAD //------------------------------------------------- declare( strict_types = 1 ); header( 'Content-Type:text/plain' ); error_reporting( E_ALL ); ini_set( 'display_errors', '1' ); ini_set( 'html_errors', '0' ); define( 'CORE_DIR', dirname( __FILE__ ) . DIRECTORY_SEPARATOR ); isset( $argv ) or trigger_error( 'This is a command terminal application.', E_USER_ERROR ); echo __FILE__ . ' [PID:' . getmypid() . '][PHP:' . phpversion() . ']' . PHP_EOL . PHP_EOL; function process_recording( $process_message ) { echo 'event ' . $process_message . PHP_EOL; } //------------------------------------------------- // WORKS AS DESIRED //------------------------------------------------- $test = 'foo'; $file_path = CORE_DIR . 'test.php'; // file content: <?php $test = 'bar'; file_exists( $file_path ) and process_recording( 'require_once ' . $file_path ) . ( require_once $file_path ) or process_recording( 'file_not_found ' . $file_path ); echo $test . PHP_EOL; //------------------------------------------------- // DOES NOT WORK AS DESIRED //------------------------------------------------- $action = 2; // Parse error: syntax error, unexpected 'goto' (T_GOTO) // $action === 1 and process_recording( 'goto_action_1' ) . goto goto_action_1; // $action === 2 and process_recording( 'goto_action_2' ) . goto goto_action_2; // $action === 1 and process_recording( 'goto_action_1' ) . ( goto goto_action_1 ); // $action === 2 and process_recording( 'goto_action_2' ) . ( goto goto_action_2 ); // $action === 1 and process_recording( 'goto_action_1' ) . goto( 'goto_action_1' ); // $action === 2 and process_recording( 'goto_action_2' ) . goto( 'goto_action_2' ); //------------------------------------------------- // LOOKS UGLY, BUT WORKS //------------------------------------------------- if ( $action === 1 ): process_recording( 'goto_action_1' ); goto goto_action_1; endif; if ( $action === 2 ): process_recording( 'goto_action_2' ); goto goto_action_2; endif; exit; goto_action_1: echo 'action_1' . PHP_EOL . exit; goto_action_2: echo 'action_2' . PHP_EOL . exit; goto_end_of_file: echo 'end_of_file' . PHP_EOL . exit; ?> ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=77776&edit=1

« previous php.bugs (#220117) next »