Home Backend Development PHP Tutorial php链表,装载器方式与调用入口保护

php链表,装载器方式与调用入口保护

Jun 13, 2016 am 11:01 AM
data gt public

php链表,装载器模式与调用入口保护

这是一个十分有趣的问题。三者相遇,会发生一种怪异的冲突。
当装载器模式模式实现链表的不同操作的算法之时,我们在链类表中是用$this传入链表本身。结果,算法中,无法删除链表的head。
具体表现为,函数内部,删除head成功,而返回值则记远是原始的head.
为什么呢?原来就是调用入口保护在作怪。但如果细想一下,这个保护是必须的。否则,函数流程没有返回的位置了。无法再继续下去。
所以,算法内部只能放弃删除head的想法。如何实现呢?请看以下代码:

<?php error_reporting(E_ALL);        class csList{        public $data='';        public $parent;??????? public $childNodes=array();        public function __construct($data=false){            $this->data=$data;                    }        //问题就是出在这里,因为这里是调用入口,本节点自然不可以被删除。        public function loadData($dataString,$className){            $obj=new $className();            $obj->loadDataString($dataString,$this);            //print_r($this); //这里是错的。        }    }        class csStringAdapter{        public function loadDataString($dataString, csList $cl, $level=0){            $spliter=array("\r\n", ',',' ');            $dataArray=explode($spliter[$level],$dataString);            for($i=0,$j=count($dataArray);$iparent = $cl;                $cl->childNodes[]=$newNode;                $dataItems=explode(' ', $dataArray[$i]);                                if (strpos($dataArray[$i],$spliter[$level+1])!==false){                    echo 1;// exit;                    $this->loadDataString($dataArray[$i],$newNode,$level+1);                }else{                    $newNode->data=$dataArray[$i];                }             }                     if ((count($cl->childNodes)==1) && ($cl->data=='')){ //因为head节点是空节点,所以要删除                $cl=$cl->childNodes[0];//这样删除head是不行的。                //print_r ($cl); //但这里打印输出的结果是正确的。            }        }    }        $test = new csList();    $nodeStr='a,b,c,d,e';    $test->loadData($nodeStr,'csStringAdapter');     print_r($test); //这里打印也是错的。head总是空节点,即是无data,同时只有一个childNodes的节点?>
Copy after login

?

明白了PHP对调用入口的保护,也就是明白了,程序中函数调用需要从哪里来,还回哪里去,那么,上面的代码就好修改了。以下是修改后的代码

<?php error_reporting(E_ALL);        class csList{        public $data='';        public $parent;        public $childNodes=array();        public function __construct($data=false){            $this->data=$data;                    }        //问题就是出在这里,因为这里是调用入口,本节点自然不可以被删除。        public function loadData($dataString,$className){            $obj=new $className();            $obj->loadDataString($dataString,$this);            //print_r($this); //这里是对的。        }    }        class csStringAdapter{        public function loadDataString($dataString, csList $cl, $level=0){            $spliter=array("\r\n", ',',' ');            $dataArray=explode($spliter[$level],$dataString);            for($i=0,$j=count($dataArray);$iparent = $cl;                $cl->childNodes[]=$newNode;                $dataItems=explode(' ', $dataArray[$i]);                                if (strpos($dataArray[$i],$spliter[$level+1])!==false){                    echo 1;// exit;                    $this->loadDataString($dataArray[$i],$newNode,$level+1);                }else{                    $newNode->data=$dataArray[$i];                }             }                     if ((count($cl->childNodes)==1) && ($cl->data=='')){ //因为head节点是空节点,所以要删除                //$cl=$cl->childNodes[0];//这样删除head是不行的。                //print_r ($cl); //但这里打印输出的结果是正确的。                //我们这样修改:将子节点数据复制到父节点中,实际是放弃第一层子节点:                $cl->data=$cl->childNodes[0]->data;                $cl->childNodes=$cl->childNodes[0]->childNodes;                for($i=0,$j=count($cl->childNodes);$ichildNodes[$i]->parent=$cl;                }            }        }    }        $test = new csList();    $nodeStr='a,b,c,d,e';    $test->loadData($nodeStr,'csStringAdapter');     print_r($test); //经过这样修改,一切就正确了。?>
Copy after login

?

?

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Roblox: Bubble Gum Simulator Infinity - How To Get And Use Royal Keys
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusion System, Explained
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers Of The Witch Tree - How To Unlock The Grappling Hook
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1666
14
PHP Tutorial
1273
29
C# Tutorial
1253
24
What are the differences between Huawei GT3 Pro and GT4? What are the differences between Huawei GT3 Pro and GT4? Dec 29, 2023 pm 02:27 PM

Many users will choose the Huawei brand when choosing smart watches. Among them, Huawei GT3pro and GT4 are very popular choices. Many users are curious about the difference between Huawei GT3pro and GT4. Let’s introduce the two to you. . What are the differences between Huawei GT3pro and GT4? 1. Appearance GT4: 46mm and 41mm, the material is glass mirror + stainless steel body + high-resolution fiber back shell. GT3pro: 46.6mm and 42.9mm, the material is sapphire glass + titanium body/ceramic body + ceramic back shell 2. Healthy GT4: Using the latest Huawei Truseen5.5+ algorithm, the results will be more accurate. GT3pro: Added ECG electrocardiogram and blood vessel and safety

Fix: Snipping tool not working in Windows 11 Fix: Snipping tool not working in Windows 11 Aug 24, 2023 am 09:48 AM

Why Snipping Tool Not Working on Windows 11 Understanding the root cause of the problem can help find the right solution. Here are the top reasons why the Snipping Tool might not be working properly: Focus Assistant is On: This prevents the Snipping Tool from opening. Corrupted application: If the snipping tool crashes on launch, it might be corrupted. Outdated graphics drivers: Incompatible drivers may interfere with the snipping tool. Interference from other applications: Other running applications may conflict with the Snipping Tool. Certificate has expired: An error during the upgrade process may cause this issu simple solution. These are suitable for most users and do not require any special technical knowledge. 1. Update Windows and Microsoft Store apps

What is the difference between the developer version and the public version of iOS? What is the difference between the developer version and the public version of iOS? Mar 01, 2024 pm 12:55 PM

Every year before Apple releases a new major version of iOS and macOS, users can download the beta version several months in advance and experience it first. Since the software is used by both the public and developers, Apple has launched developer and public versions, which are public beta versions of the developer beta version, for both. What is the difference between the developer version and the public version of iOS? Literally speaking, the developer version is a developer test version, and the public version is a public test version. The developer version and the public version target different audiences. The developer version is used by Apple for testing by developers. You need an Apple developer account to download and upgrade it.

How to Fix Can't Connect to App Store Error on iPhone How to Fix Can't Connect to App Store Error on iPhone Jul 29, 2023 am 08:22 AM

Part 1: Initial Troubleshooting Steps Checking Apple’s System Status: Before delving into complex solutions, let’s start with the basics. The problem may not lie with your device; Apple's servers may be down. Visit Apple's System Status page to see if the AppStore is working properly. If there's a problem, all you can do is wait for Apple to fix it. Check your internet connection: Make sure you have a stable internet connection as the "Unable to connect to AppStore" issue can sometimes be attributed to a poor connection. Try switching between Wi-Fi and mobile data or resetting network settings (General > Reset > Reset Network Settings > Settings). Update your iOS version:

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

What data is in the data folder? What data is in the data folder? May 05, 2023 pm 04:30 PM

The data folder contains system and program data, such as software settings and installation packages. Each folder in the Data folder represents a different type of data storage folder, regardless of whether the Data file refers to the file name Data or the extension. Named data, they are all data files customized by the system or program. Data is a backup file for data storage. Generally, it can be opened with meidaplayer, notepad or word.

Is watch4pro better or gt? Is watch4pro better or gt? Sep 26, 2023 pm 02:45 PM

Watch4pro and gt each have different features and applicable scenarios. If you focus on comprehensive functions, high performance and stylish appearance, and are willing to bear a higher price, then Watch 4 Pro may be more suitable. If you don’t have high functional requirements and pay more attention to battery life and reasonable price, then the GT series may be more suitable. The final choice should be decided based on personal needs, budget and preferences. It is recommended to carefully consider your own needs before purchasing and refer to the reviews and comparisons of various products to make a more informed choice.

Java function access permission modifier public usage guide Java function access permission modifier public usage guide Apr 26, 2024 am 08:39 AM

The Java public access modifier allows functions to be accessed from anywhere and is used to declare public APIs and define tools and utilities that are shared across packages or classes. The specific usage is as follows: Syntax: public return value type function name (parameter list) {...} Scenario: functions that need to be accessed from anywhere, methods in public APIs, shared tools or utilities

See all articles