php链表,装载器方式与调用入口保护
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的节点?>
?
明白了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); //经过这样修改,一切就正确了。?>
?
?

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

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

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics











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

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

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.

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

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.

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.

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
